Hello and welcome to the Friends of the Mount Vernon Trail project! We'll be working, communicating, and logging bugs here, as well as in our other communication channels.
Volunteers use the app to document trail issues during a work event: they photograph a problem before and after fixing it, record metrics, and publish a summary to Trello. The photos go into a shared Google Photos album owned by the MVT account, which is what the backend exists to make possible.
frontend/— the Expo (React Native) app.cd frontend && npm install && npm start.backend/— Node + TypeScript service that proxies Google Photos uploads into the MVT-owned album. Volunteers authenticate to it with their Firebase ID token; it holds the single Google refresh token. Deployed on Render. Seebackend/README.mdfor the API and setup.firestore.rules/firestore.indexes.json— Firestore security rules and composite indexes. Deployed by a lead, indexes before rules — see Admin setup.firestore/— emulator-backed tests for those rules.
For every engineer. Ask a lead for the .env values; the app and backend both
run against the shared friends-of-mvt Firebase project.
cd frontend && npm install, thencp .env.example .envand fill it in.cd backend && npm install, thencp .env.example .envand fill it in.
That is all a development machine needs. Don't run the admin steps below against the shared project unless you are the one doing them for the team.
These change shared state for everyone, so they are done once per project, not per engineer:
-
If the project has data from before the ownership refactor (true of
friends-of-mvtuntil the refactor is deployed), follow the ownership migration runbook instead of the deploy step below. It deploys indexes and rules itself, with a backfill in between; deploying rules first locks users out of their events. -
Deploy Firestore indexes, then rules, in that order, from the repo root. Wait for every index to report
READYbefore deploying rules;--prettyis what makes the output show each index's state.npx firebase deploy --only firestore:indexes npx firebase firestore:indexes --pretty npx firebase deploy --only firestore:rules
-
Grant the
adminclaim to the people who need it:cd backend && npm run set-admin -- someone@example.com. They sign out and back in for it to take effect. -
Link the MVT Google account to the backend — see the backend README.
Both halves run the same three gates; CI enforces them on every PR.
cd frontend && npm run typecheck && npm run lint && npm test
cd backend && npm run typecheck && npm run lint && npm test
cd firestore && npm test # boots the Firestore emulator, asserts firestore.rulesThe rules suite needs Java (for the emulator) but no credentials and no live
Firebase project — it runs firestore.rules against a throwaway emulator
instance. firebase-tools is a local devDependency of firestore/, so use
npx firebase rather than a global install.
MANUAL_TEST_PLAN.md covers the flows that need real Google/Trello credentials.
Please clone with SSH. See here to set up a key for your device if it doesn't have one already. Check this out for step-by-step instructions on cloning a repo.
Every task will be completed on its own branch. If there are multiple engineers on your task, you can all use the same branch. You can create the remote branch first or create locally and push it.
Branch naming convention: Please start new feature task branches with feature/ and bug fix task branches with bugfix/.
Aim for short, descriptive commit messages. A good way to think about it is to imagine your commit message finishes the sentence "This commit will...". Also, double-check that you're on your branch and not committing secrets or .env information. Then, push your changes to your branch!
Pull from main, merge it into your branch, and test your code again before PRing. This will hopefully mean that you'll be all set to merge once we approve it.
When you're done with the task and have tested your code, make a PR for us to review. Give it a descriptive title. A template should populate with guidelines on how to fill out the description. The more information you give us, the faster we'll be able to get your PR approved!
Requesting review: Our github usernames are bsthapar and asea-aranion.
git checkout -b feature/login
# add/edit files
# the following can also be done in vscode source control
git add -A
git commit -m "create login page frontend"
git push -u origin feature/login
# for subsequent pushes, just 'git push' will work
# repeat until task is complete
git checkout main
git pull origin main
git checkout feature/login
git merge main
# resolve conflicts
# open github and make PR
![]() Nathan James |
![]() John Vu |
![]() Name |
![]() Name |
![]() Name |
![]() Soumya Jaiswal |
![]() Name |
![]() Name |
![]() Name |
![]() Name |
![]() James Zhou |
![]() Jai Patel |
![]() Aaryan Patel |
![]() Ryan Zhao |
![]() Name |
![]() Chloe Thompson |
![]() Srinidhi Gubba |
![]() Indira Shafii |










