3 KiB
3 KiB
Parlo Styring Architecture
Stack
- Framework: Next.js 14.2.5 (App Router)
- Styling: Tailwind CSS
- Language: TypeScript
- Deployment: Docker → Coolify → Traefik
Data Flow
┌─────────────────┐ ┌──────────────────┐
│ Browser/PWA │────▶│ Next.js Server │
└─────────────────┘ └────────┬─────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Ordrestyring │ │ OpenRouter AI │ │ Vector Memory │
│ GraphQL API │ │ (claude-haiku) │ │ (Qdrant+BGE-M3) │
└─────────────────┘ └──────────────────┘ └──────────────────┘
Key Components
Pages (App Router)
/— Redirect to dashboard/dashboard— Main overview/sager— Cases list/sager/[id]— Case detail/kunder— Customers list/medarbejdere— Workers list/tidsplan— Gantt schedule
API Routes
/api/cases— Proxy to Ordrestyring cases/api/customers— Proxy to Ordrestyring customers/api/workers— Proxy to Ordrestyring workers/api/hours— Time entries/api/ai/chat— AI chat with RAG
Ordrestyring Client
src/lib/ordrestyring.ts — TypeScript GraphQL client
// Read operations (always enabled)
getCases(limit, page)
getCase(id)
getCustomers(limit, page)
getWorkers(limit, page)
getHours(limit, page)
// Write operations (gated by ENABLE_WRITES)
createCase(data)
updateCase(id, data)
Environment Variables
| Variable | Required | Description |
|---|---|---|
ORDRESTYRING_API_KEY |
Yes | Ordrestyring GraphQL API key |
ENABLE_WRITES |
No | Enable write mutations (default: false) |
OPENROUTER_API_KEY |
No | AI chat functionality |
NEXTAUTH_URL |
Yes | Auth callback URL |
NEXTAUTH_SECRET |
Yes | Session encryption |
Docker
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]
Coolify Config
- Build: Dockerfile
- Port: 3000
- Health:
/api/health - Volume:
parlo-styring-data:/app/data(for uploads)