The purpose of this repository is to proved a template for a base starting point for C4G course projects. This template is not mandatory, but it captures the needs of a typical C4G project that uses a website and a database. A team that uses the template for building their project can also use it to meet course reporting requirements. Features include:
-
Authentication using google with 2 provided test accounts
-
CI/CD which will deploy the application and DB to the c4g.dev server using your applications sub-domain.
-
A user management page for
ADMINusers. Base roles areADMINandSTAFF. -
Project specific deliverable pages to quickly update as we progress through the course. Found by clicking the
Teamlink in the footer of the application. -
More to come as we add common features we find useful across applications. We welcome student pull requests to add features!
Our goal is to make this template easy to use for any student in the class, so feedback to improve the template or this readme are most welcome!
- Make sure you have the following setup and configured on your computer:
- git or Github Desktop
- NodeJS - version 24 or higher
- pnpm - Fast, disk space efficient package manager
- Docker
- Clone the repo using either SSH, HTTPS, or Github Desktop
- SSH
git clone git@github.gatech.edu:cs-6150-computing-for-good/template.git- HTTPS
git clone https://github.gatech.edu/cs-6150-computing-for-good/template.git- Get the
.envfile from Microsoft teams or ask a TA for the file. This file will be specific to your project once this repo is cloned and must be created by a TA as we have to setup the github action secrets. - Install all of the node dependencies with the following command
pnpm install- Make sure you have docker running and run the following command to initialize the database, apply all database schema, and seed some test users:
pnpm run init- If all is well up to this point your terminal should look like this:

- Next, run the development server
pnpm run devOpen http://localhost:3000 with your browser to see the result.
- You may login with either of the accounts below or with your own gmail account
| Username | Password | Role |
|---|---|---|
| c4gdevad@gmail.com | EHdqcGJajTAnSy$8 | ADMIN |
| c4gdevstaff@gmail.com | JCbSk3&&JF!h#m@x | STAFF |
- To access the database you can run the following command in a new terminal:
pnpm exec prisma studioIt should open the browser automatically or you can open http://localhost:5555/ to see the database tables.
You can start editing the page by modifying src/app/page.tsx. The page auto-updates as you edit the file.
This project uses next/font to automatically optimize and load Geist, a new font family for Vercel.
- Replace
templatein many files to your project name. - Setup oauth settings in GCP
- Setup nginx configuration, and re-run SSL cert on C4G Server.
- Generate VAPID keys for PWA setup Generator
- Generate RESEND key Resend
- Nextjs - framework
- Typescript
- Tailwind - css atomic classes
- Prisma - db type ORM system
- Prettier - formatter
- ESLint - enforce rules / policies for maintable code
- Husky - allows for code changes during local commit
- Lint-Staged - lints code on only staged files with auto-fix
- Docker - containers
- Postgres - database
- Github Actions - ci/cd process
- Nginx - server hosting configuration / routing
- Shadcn - UI component library
- RadixUI - UI component library
- Lucide-React - UI icons
- Next-Auth - authentication with google
- Ag-Grid - grid / table component
- Resend - emails
If you want to contribute to this template for future projects please work with the teaching staff. We welcome any technologies that could benefit the partners and speed to delivery for features.
The application uses Docker Compose for production deployments with an automated migration workflow:
- Database: PostgreSQL 17 with persistent volume storage
- Migrations: Separate init container that runs database migrations before the app starts
- Application: Next.js standalone server with optimized production build
Build and start all services:
docker compose --profile production up -d --buildCheck service status:
docker compose psView logs:
# All services
docker compose logs
# Specific service
docker compose logs template-app
docker compose logs template-migrationsStop services:
docker compose --profile production downClean shutdown with volume and orphan container removal:
docker compose --profile production down --volumes --remove-orphans- Database starts and waits for healthy status
- Migration container runs
prisma migrate deployand exits - Application starts only after migrations complete successfully
The migration container (template-migrations) runs once per deployment and automatically exits after completion. Docker Compose handles cleanup of stopped containers on subsequent deployments.
All required environment variables must be set in your .env file before deployment. See example.env for the complete list. Key variables:
DATABASE_*: PostgreSQL connection settingsAUTH_*: NextAuth configurationNEXT_PUBLIC_VAPID_PUBLIC_KEY/VAPID_PRIVATE_KEY: Push notification keysRESEND_API_KEY: Email service configuration