Files
linkder/.env.example
T
serfowiandClaude Opus 5 19623bcccb M0: foundation — monorepo, PostGIS schema, deck query, app shell
Greenfield scaffold for Linkder, a swipe-to-hire marketplace for local
professional services.

- pnpm/turbo monorepo: apps/web, packages/{shared,db}
- Postgres 16 + PostGIS via docker compose (ports 5442/6389 to avoid
  clashing with other local stacks)
- Drizzle schema, 23 tables, geography(Point,4326) with GiST indexes
- Domain core in packages/shared: integer-cent money, status transition
  graphs, deck ranking weights, cancellation policy — 46 unit tests
- Deck query: filtering in Postgres on the GiST index, ranking in JS so
  the weights stay tunable — 18 integration tests against a seeded DB
- Deterministic seed placing pros at known distances, including three
  that must NOT appear on a deck (out of radius, unverified, away)
- Next.js 15 app shell with a working swipe deck
- CI: typecheck, lint, test, build against live postgres+redis

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 13:32:35 -04:00

50 lines
1.2 KiB
Bash

# ---- Core ----
NODE_ENV=development
NEXT_PUBLIC_APP_URL=http://localhost:3000
# ---- Database (Postgres 16 + PostGIS) ----
DATABASE_URL=postgresql://linkder:linkder@localhost:5442/linkder
# ---- Redis (pub/sub for SSE chat + BullMQ queues) ----
REDIS_URL=redis://localhost:6389
# ---- Auth.js v5 ----
# generate with: openssl rand -base64 32
AUTH_SECRET=
AUTH_URL=http://localhost:3000
AUTH_GOOGLE_ID=
AUTH_GOOGLE_SECRET=
# ---- Phone OTP (Twilio Verify) ----
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_VERIFY_SERVICE_SID=
# ---- Stripe Connect ----
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
# Platform commission in basis points (1500 = 15%)
PLATFORM_FEE_BPS=1500
# ---- Didit (ID verification) ----
DIDIT_API_KEY=
DIDIT_WORKFLOW_ID=
DIDIT_WEBHOOK_SECRET=
# ---- Cloudflare R2 (S3-compatible object storage) ----
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=linkder-uploads
R2_PUBLIC_URL=
# ---- Resend (transactional email) ----
RESEND_API_KEY=
EMAIL_FROM=noreply@linkder.app
# ---- Launch market (city-scoped MVP) ----
NEXT_PUBLIC_CITY_NAME=Barcelona
NEXT_PUBLIC_CITY_LAT=41.3874
NEXT_PUBLIC_CITY_LNG=2.1686