150 lines
3.7 KiB
Markdown
150 lines
3.7 KiB
Markdown
# Spanglish — Language Exchange Event Platform
|
|
|
|
A full-stack web app for organizing and managing language exchange events (Asunción, Paraguay).
|
|
|
|
## Features
|
|
|
|
- **Public site**: events, booking, contact, community, legal pages, bilingual (EN/ES)
|
|
- **User dashboard**: profile, tickets, payments, sessions/security
|
|
- **Admin** (`/admin`): events, tickets/check-in, users/roles, payments, email templates, media uploads
|
|
- **API**: Swagger UI at `/api-docs`, OpenAPI JSON at `/openapi.json`, health check at `/health`
|
|
|
|
## Tech stack
|
|
|
|
- **Backend**: Node.js + TypeScript, Hono, Drizzle ORM, SQLite (default) or PostgreSQL
|
|
- **Auth**: JWT (via `jose`), **Argon2id** password hashing (with legacy bcrypt verification for older hashes)
|
|
- **Email**: `nodemailer` (SMTP) with optional provider config
|
|
- **Frontend**: Next.js 14 (App Router), Tailwind CSS, SWR, Heroicons
|
|
|
|
## Local development
|
|
|
|
### Prerequisites
|
|
|
|
- Node.js 18+
|
|
- npm
|
|
|
|
### Setup
|
|
|
|
```bash
|
|
npm install
|
|
cp backend/.env.example backend/.env
|
|
cp frontend/.env.example frontend/.env
|
|
```
|
|
|
|
### Initialize database (SQLite by default)
|
|
|
|
```bash
|
|
npm run db:migrate
|
|
```
|
|
|
|
### Run
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
Default URLs:
|
|
|
|
- Frontend: `http://localhost:3002`
|
|
- Backend API: `http://localhost:3001`
|
|
- API docs: `http://localhost:3001/api-docs`
|
|
|
|
### First user becomes admin
|
|
|
|
The first user to register becomes the **admin**. Register at `/register`.
|
|
|
|
## Useful scripts (workspace)
|
|
|
|
Run these from the repo root:
|
|
|
|
```bash
|
|
npm run dev
|
|
npm run build
|
|
npm run start
|
|
npm run db:generate
|
|
npm run db:migrate
|
|
npm run db:studio
|
|
```
|
|
|
|
You can also run per workspace:
|
|
|
|
```bash
|
|
npm run dev --workspace=backend
|
|
npm run dev --workspace=frontend
|
|
```
|
|
|
|
## Environment variables
|
|
|
|
### Backend (`backend/.env`)
|
|
|
|
Key settings (see `backend/.env.example` for the full list):
|
|
|
|
- **DB**: `DB_TYPE=sqlite|postgres`, `DATABASE_URL=./data/spanglish.db` (or Postgres URL)
|
|
- **Auth**: `JWT_SECRET` (change in production)
|
|
- **URLs/ports**: `PORT`, `API_URL`, `FRONTEND_URL`
|
|
- **Email**: `EMAIL_PROVIDER` (`console|smtp|resend`) and corresponding credentials
|
|
- **Payments (optional)**: Stripe/MercadoPago/LNbits configuration
|
|
|
|
### Frontend (`frontend/.env`)
|
|
|
|
Key settings (see `frontend/.env.example`):
|
|
|
|
- **Server port**: `PORT=3002`
|
|
- **API base URL**: `NEXT_PUBLIC_API_URL` (optional)
|
|
- Leave empty to use same-origin `/api` (recommended when running behind nginx)
|
|
- In local dev, Next.js rewrites `/api/*` and `/uploads/*` to the backend
|
|
- **Social links (optional)**: `NEXT_PUBLIC_WHATSAPP`, `NEXT_PUBLIC_INSTAGRAM`, etc.
|
|
|
|
## Database
|
|
|
|
### SQLite (default)
|
|
|
|
- DB file defaults to `backend/data/spanglish.db` (via `DATABASE_URL=./data/spanglish.db`)
|
|
- Run migrations with `npm run db:migrate`
|
|
|
|
### PostgreSQL
|
|
|
|
Set in `backend/.env`:
|
|
|
|
```env
|
|
DB_TYPE=postgres
|
|
DATABASE_URL=postgresql://user:password@localhost:5432/spanglish
|
|
```
|
|
|
|
Then run:
|
|
|
|
```bash
|
|
npm run db:migrate
|
|
```
|
|
|
|
## Production deployment (nginx + systemd)
|
|
|
|
This repo includes example configs in `deploy/`:
|
|
|
|
- **systemd**: `deploy/spanglish-backend.service`, `deploy/spanglish-frontend.service`
|
|
- Backend runs on **3018**, frontend on **3019** by default (see the unit files)
|
|
- Backend needs write access to `backend/data` and `backend/uploads`
|
|
- **nginx**:
|
|
- `deploy/spanglish_upstreams.conf` defines upstreams for ports 3018/3019
|
|
- `deploy/front-end_nginx.conf` proxies `/api` and `/uploads` to the backend and everything else to the frontend
|
|
- `deploy/back-end_nginx.conf` is a dedicated API vhost example with CORS handling
|
|
|
|
Typical production flow:
|
|
|
|
```bash
|
|
npm ci
|
|
npm run build
|
|
npm run db:migrate
|
|
```
|
|
|
|
Then install/enable the systemd services and nginx configs for your server.
|
|
|
|
## Documentation
|
|
|
|
- **Specs / notes**: `about/`
|
|
- **Legal docs**: `frontend/legal/`
|
|
|
|
## License
|
|
|
|
MIT
|