Initial commit: Callsign Generator with FastAPI and React

This commit is contained in:
Joakim Svensson
2026-01-21 19:23:31 +00:00
commit d5da47eb5c
23 changed files with 3470 additions and 0 deletions

131
KRAV.md Normal file
View File

@@ -0,0 +1,131 @@
# Callsign-generator
##1. Syfte
Skapa en webbaserad tj??nst som genererar CB-handles/callsigns med hj??lp av en LLM. Anv??ndaren ska kunna ge grundparametrar och eventuellt f??rfina dessa via f??ljdfr??gor innan generering.
##2. M??lbild
Tj??nsten ska:
- generera ett realistiskt callsign baserat p?? anv??ndarens input
- ge en kort motivering till varf??r callsignet passar
- vara konsekvent, f??ruts??gbar och snabb att anv??nda
- k??nnas ???dialogisk??? genom adaptiva f??ljdfr??gor
##3. Anv??ndarfl??de (MVP)
### Steg 1 - Initial input via UI
Anv??ndaren besvarar initiala val s??som:
- Stil (t.ex. Milit??r / Humor / Klassisk CB / Annan ??? fritext)
- Ton (t.ex. Seri??s / Aggressiv / Lekfull)
- Fritextbeskrivning (valfritt)
### Steg 2 - Val
Efter initiala svar finns tv?? knappar:
```
[ Generera ] [ Fler fr??gor ]
```
### Steg 3A - Generera
- Backend skickar sammanst??lld prompt till LLM
- LLM returnerar JSON med:
- callsign
- motivering
### Steg 3B - Fler fr??gor
- Backend skickar prompt till LLM som genererar 1???3 relevanta f??ljdfr??gor
- Anv??ndaren besvarar fr??gorna
- Svaren lagras i state
- Anv??ndaren kan d??refter v??lja "Generera" eller "Fler fr??gor" igen
## 4. Funktionella krav
### 4.1 Input
- Systemet ska st??dja:
- val via dropdown/radioknappar
- fritext
- ??terkommande f??ljdfr??gor
### 4.2 Output
Systemet ska returnera JSON i stabilt format:
```
{
"callsign": "<string>",
"reason": "<string>"
}
```
### 4.3 F??ljdfr??gor
F??ljdfr??gorna ska:
- baseras p?? anv??ndarens tidigare svar
- vara relevanta och korta
- komma i 1???3 fr??gor ??t g??ngen
- returneras som JSON:
```
{ "questions": [ "fr??ga 1", "fr??ga 2" ] }
```
### 4.4 State Management
Frontend ska lagra:
```
answers = {
initial_params: {...},
follow_up_answers: {...}
}
```
### 4.5 Spr??k
MVP riktas mot svenska men ska kunna ut??kas till andra spr??k.
## 5. Icke-funktionella krav
- LLM-styrning: Stabilt via templade prompts och JSON-utdata
- Prestanda: Svar inom < 2 sekunder f??r majoriteten av anrop (exkl. cold start)
- Skalbarhet: Designad s?? backend kan distribueras vid behov
- Robusthet: Systemet ska inte ???balla ur??? med l??nga poetiska svar
- Utbyggbarhet: Framtida logotyp-/TTS-/fonetikmoduler m??jliga
- Kostnadskontroll: Kan inf??ras via rate-limit + begr??nsad iteration
## 6. Systemarkitektur
### Frontend
- Visar formul??r + resultat
- Renderar f??ljdfr??gor
- H??ller state med anv??ndarsvar
- Anropar backend via REST/HTTPS
### Backend
- API som hanterar tv?? endpointtyper:
```
POST /questions
Input: answers
Output: JSON med f??ljdfr??gor
POST /generate
Input: answers
Output: JSON med callsign + motivering
```
- Backend ansvarar f??r:
- promptkonstruktion
- validering
- OpenRouter-anrop
- eventuella caches
### LLM (via OpenRouter)
- Backend anropar LLM
- LLM returnerar JSON enligt definierad struktur
## 7. S??kerhets- och ??tkomstkrav
- API-nyckel f??r OpenRouter f??r inte exponeras i frontend
- Backend signerar samtliga anrop internt
- M??jlighet till rate-limit per IP
## 8. Implementationsteknik (rekommenderad)
### Frontend:
- SvelteKit / React / Vue (valfritt)
### Backend:
- Python (FastAPI) eller Node (Fastify)
### Host-varianter:
- docker med docker-compose
### LLM:
- OpenRouter, valfri modell (t.ex. GPT-4, Claude etc)