From: %YOU%
To: %INDIVIDUAL%
CC: private@couchdb.apache.org
Subject: Re: Invitation to become a CouchDB committer
================================================================================

Dear %NAME%,

Welcome. Here are the next steps.

You need to send a Contributor License Agreement to the ASF. Normally you would send an Individual CLA. It may also be necessary to send a Corporate CLA. Ask us if you have any questions about this.

Find out how to do this here:

    http://www.apache.org/licenses/#clas

You will need to choose a preferred ASF user ID.

In order to ensure your ID available, you can view a list of taken IDs at:

    http://people.apache.org/committer-index.html

Please notify us when you have submitted the CLA and by what means you did so. This will enable us to monitor its progress.

We will arrange for your Apache user account when the CLA has been recorded. After this we will make an announcement to the dev@couchdb.apache.org list, and your new position will be official.

You will receive a few emails from various different people as this process moves forward. You will also be given commit access half way through this process, but please do not make any commits until your new position has been announced.

In response to this email, please indicate:

 * Your IRC nick (if you have one)
 * Your Twitter account (if you have one)

Please work your way through:

    http://s.apache.org/couchdb-committer-first-steps

This document contains:

 - Required reading
 - Accounts to configure
 - Useful resources

If you have any questions at all, please reply to this email.

Thank you,
