FtC Hackathon project
- TypeScript 80.5%
- Gherkin 10%
- JavaScript 6.7%
- Shell 2.3%
- Dockerfile 0.5%
|
|
||
|---|---|---|
| .claude | ||
| app | ||
| assets | ||
| components | ||
| constants | ||
| docker | ||
| docs | ||
| server | ||
| src | ||
| tests | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| app.json | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| cucumber.js | ||
| Dockerfile | ||
| expo-env.d.ts | ||
| jest.config.js | ||
| LICENSE | ||
| LINEAR-ISSUE-TEMPLATE.md | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| pnpm-workspace.yaml | ||
| ralph.sh | ||
| README.md | ||
| schema.sql | ||
| tsconfig.json | ||
Tender
A mobile-first vertical video platform for civic engagement. Record, share, and respond to short-form video tied to local issues, candidates, ballot measures, and community discussions.
Getting started
Prerequisites
- Node 20+
- Docker (for production builds), or
- Expo CLI (
npx expo) for native/local development
Install
git clone https://git.myceli.al/deiim/tender.git
cd tender
npm install
# Configure environment
cp .env.example .env
# Fill in values — set JWT_SECRET and DATABASE_URL
Run locally
npx expo start
The dev server is available at http://localhost:8081.
Production build (Docker)
docker build -t tender .
docker run -p 80:80 -e JWT_SECRET=your-secret tender
The container runs PostgreSQL, the Express API, and serves the web app — all on port 80.
Project structure
/
├── app/ # Expo Router pages and screens
├── src/ # Source code (components, hooks, lib, store, utils, types)
├── components/ # Shared UI components
├── constants/ # App constants (e.g. Colors)
├── assets/ # Images, fonts, splash screens
├── server/ # Express API server
├── docs/ # Docker and quickstart guides
└── schema.sql # PostgreSQL database schema
Contributing
We use Linear for issue tracking and Cyrus (an AI agent) for development. See CONTRIBUTING.md for the full team workflow, including how to write issues, work with Cyrus, and review PRs.
Stack
| Layer | Technology |
|---|---|
| Frontend | React Native / Expo 55 (expo-router, TypeScript) |
| Backend | Express.js API server |
| Database | PostgreSQL |
| Video | expo-video, expo-camera |
| Auth | JWT (bcryptjs + jsonwebtoken) |
| State | Zustand + TanStack React Query |
| UI | React Native Paper + Lucide icons |
| Hosting | Single Docker container (PostgreSQL + Express) |