Project: FCC Donation Platform
Organization: Code4Community
Date: June 2026
- System Architecture & Core Stack
- Integrations & Key Services
- Storage & Hosting (TBD)
- Widget Build & Distribution
- Styling Architecture
- Environment & Containerization
- Credits & Contributors
- Maintenance & Contact
The repository is structured as an Nx Monorepo.
- Framework: NestJS (10.x).
- Data Layer: PostgreSQL accessed via TypeORM. SQLite is retained for specific local test scaffolding.
- Validation: DTOs processed via
class-validatorandclass-transformer. - Testing: Jest and Supertest for E2E specs.
- Framework: React 18 built with Vite.
- Routing: React Router v6.
- UI Libraries: Tailwind CSS natively bridging with
shadcn/ui(@radix-ui) andlucide-reacticons. - Rich Text: Tiptap (
@tiptap/react,@tiptap/starter-kit) for email/content editing. - Analytics: Recharts for admin dashboard data visualization.
- Frontend:
@stripe/react-stripe-jsand@stripe/stripe-js. Uses<CardElement>/<PaymentElement>for PCI-compliant tokenization and intent confirmation. - Backend: Handles
Stripe webhookverification (STRIPE_WEBHOOK_SECRET) to confirm payment fulfillment before executing database mutations.
- Architecture: Offloads user management and auth state. Frontend interacts via
amazon-cognito-identity-js. - Backend Verification: Protected routes use
@nestjs/passportwithpassport-jwtandjwks-rsa. The backend verifies the RSA signatures of incoming Cognito JWTs without pinging AWS per request.
- Architecture: Transactional emails dispatch via
@aws-sdk/client-ses. - Fallback/Wrapper: A custom AWS SES wrapper operates alongside standard Node email patterns to handle bulk sends and template resolution.
- TBD: Infrastructure and deployment mapping for Amplify (frontend hosting) and S3 (asset block storage) are pending finalization.
The React frontend functions as an embeddable widget injected into client sites (specifically WordPress).
- Compiler Target:
apps/frontend/vite.embed.config.mtsbuilds the frontend into a single IIFE (Immediately Invoked Function Expression) artifact. - Environment Bridging: The API URL is not baked in at build time. The config maps
import.meta.env.VITE_API_BASE_URLtowindow.__FCC_DONATION_API_URL__. The WordPress PHP script dynamically defines this global variable on the page before loading the React script, ensuring the widget can point to different environments dynamically. - Artifact: The build pipeline generates
fcc-donation.zipcontaining the compiled React assets and thefcc-donation.phploader.
The UI relies on Tailwind CSS combined with shadcn/ui (Radix UI primitives).
Raw CSS is largely prohibited, but the following specific modules utilize .css files for highly custom component scopes:
apps/frontend/src/styles.css&root.css: Application base layers and Tailwind directive injections.apps/frontend/src/containers/donations/donations.css: Layout constraints for the core donation stepper flow.apps/frontend/src/components/GrowingGoal/GrowingGoal.module.css: Bespoke CSS module for the interactive goal tracker.apps/frontend/src/components/testimonials/testimonials.css: Carousel/testimonial structural styling.
Local development and infrastructure bootstrapping is handled via Docker Compose (docker-compose.dev.yml).
postgres: The database container.adminer: UI for database inspection.backend-dev: Node Alpine container running the NestJS dev server with hot-reload (nodemon/ts-node).
yarn docker:up:dev— Boots the local topology.yarn docker:migrate:dev— Executes TypeORM migrations inside the active backend container.
Copies of example.env require specific distributions:
- System/Database: Handled locally via Docker defaults (
NX_DB_HOST,NX_DB_PASSWORD). - Shared Infrastructure: Require shared dev-pool keys for
COGNITO,STRIPE, andAWS_SES. - IAM Access:
NX_AWS_ACCESS_KEYandNX_AWS_SECRET_ACCESS_KEYmust be generated individually per developer from the AWS IAM Console for local SES Console.
Built by the FCC Dev Team of Code4Community (Rotated team throughout September 2025 -- July 2026):
- Aaron Ashby (Tech Lead)
- Thanin (Bew) Kongkiatsophon (Tech Lead)
- Ben Petrillo
- Eric Sun
- Gauri Rajesh
- Gillian Scott
- Hannah Piersol
- Jayden Carvajal
- Pujita Kalinadhabhotla
- Sam Nie
- Matthew Chavez Cruz (Design Lead)
- Ashley Yoon
- Cindy Tran
- Matthew Wheeler
- Alex Choi (Product Lead)
- Imogen Slavin
Note: This project is finalized for the 2025–2026 build cycle and is no longer actively maintained by the original Code4Community FCC development team.
For any historical context, architectural questions, or handoff clarifications, please reach out to Thanin (Bew) Kongkiatsophon at bewxtt@gmail.com.