A sample crowdfunding application for coding workshops. Mars Mission Fund is a fictional product that channels collective capital toward missions, technologies, and teams taking humanity to Mars.
The project is designed to teach software engineering practices using production-grade specifications, architecture patterns, and development workflows.
- Product specifications covering vision, brand, engineering standards, architecture, security, and domain workflows (see specs/README.md)
- Application source code for a TypeScript full-stack crowdfunding platform
- Infrastructure configuration for local development via Docker Compose
The specifications are intentionally production-grade. They serve as working documentation and as templates demonstrating how real-world specs should be structured. Each spec includes a "Local demo scope" note identifying what matters for the workshop versus what is theatre.
For the full technology inventory, see specs/tech/tech-stack.md.
# Clone the repository
git clone https://github.com/LeeCampbell/MarsMissionFund.git
cd MarsMissionFund
# Install dependencies
npm install
# Start local infrastructure (PostgreSQL, etc.)
docker compose up -d
# Run database migrations
npm run migrate
# Start the development server
npm run devNote: External services (Stripe, Clerk, Veriff, AWS SES) are stubbed or mocked for local development. See
.env.examplefor required environment variables.
specs/ Product and technical specifications (start here)
src/ Application source code
e2e/ Playwright end-to-end tests
The specs/ directory contains a layered specification system:
Read specs/README.md before implementing any feature. It includes the full dependency graph, agent protocol, and cross-cutting concern index.
- Unit test coverage: 80%+ required
- Integration tests must pass
- E2E tests must pass
- ESLint and Prettier enforced
- Markdown linting via markdownlint-cli2
- Do not commit directly to
main-- use feature branches - Branch naming:
feat/,fix/,chore/prefixes - Push feature branches and open PRs against
main
This project is for educational purposes as part of a coding workshop.