The official website for the IT Committee of Koishikawa Secondary School (都立小石川中等教育学校).
A full-stack web application that serves as the committee's official platform, providing:
- Committee information and member profiles
- User authentication with admin verification
- Team member management
- Framework: Next.js 16 with App Router
- Language: TypeScript 5
- UI: React 19, CSS Modules
- Database: PostgreSQL via Drizzle ORM (
postgres-jsdriver) - Auth: Session-based with bcryptjs password hashing
- Deployment: Standalone Docker image, deployed to the shared VPS by
2026-server-ansible(nginx + Let's Encrypt, blue/green via a 60 s poll loop, served onkss-it.comandcommittee.kss-it.com) - CI/CD: GitHub Actions (
preview-image.ymlbuilds & pushes the multi-arch GHCRpreviewimage the VPS pulls)
- Node.js 20+
- npm
- A PostgreSQL database
npm install
npm run devCreate a .env.local file with:
DATABASE_URL=postgres://user:password@host:5432/committeeDATABASE_URL is the single required runtime variable (read lazily by
src/lib/db.ts). On the VPS it is injected automatically by the deploy infra
(postgres://committee:…@postgres:5432/committee); the tables self-initialize on
first boot. For a Google Analytics tag, set GA_MEASUREMENT_ID in
src/app/layout.tsx.
src/
├── app/ # Next.js App Router pages
│ ├── api/auth/ # Authentication API routes
│ ├── committee-info/ # Protected information page
│ ├── demo/ # Demo
│ ├── events/ # Protected events info
│ ├── login/ # Login page
│ ├── signup/ # Registration page
│ └── tutorial/ # Protected tutorials
├── components/ # Reusable React components
├── lib/ # Auth and database utilities
├── styles/ # CSS Modules
└── types/ # TypeScript definitions- User registration with password hashing
- Session-based auth with 7-day sliding expiration
- Admin verification required for new accounts
- Secure HttpOnly cookies
- Middleware-based route protection
- Tutorial content for committee members
- Committee information access control
feature/— new functionalityfix/orbugfix/— fixing bugshotfix/— urgent production fixchore/— maintenance or cleanuprefactor/— internal code changestest/— testing or experiment branchesdocs/— documentation updates
npm run dev # Start development server
npm run build # Build for production (standalone output)
npm run start # Start production server
npm run lint # Run ESLint
npm run lint:fix # Run ESLint and auto-fix
npm run format:check # Run Prettier (check)
npm run format # Run Prettier and auto-format
npm run generate # drizzle-kit generate (create a migration from db/schema.ts)
npm run migrate # drizzle-kit migrate (apply migrations to DATABASE_URL)
npm run push # drizzle-kit push (push schema directly)
npm run studio # drizzle-kit studio (schema explorer)This project is maintained by the KSS IT Committee, and is under MIT License.