Add README
This commit is contained in:
@@ -0,0 +1,204 @@
|
|||||||
|
# Enkelbudget
|
||||||
|
|
||||||
|
Enkelbudget är en självhållen budgetapp för månadsbudget, återkommande kostnader, lån, banktransaktioner och privatekonomisk överblick. Appen är byggd för svensk användning, med svensk valutaformatering, PWA-stöd och möjlighet att köra allt i en Docker-container.
|
||||||
|
|
||||||
|
## Funktioner
|
||||||
|
|
||||||
|
- Månadsbudget med inkomster, räkningar och kategorier
|
||||||
|
- Återkommande abonnemang och fasta kostnader
|
||||||
|
- Låneöversikt med betalningar och saldo
|
||||||
|
- Transaktionsvy med konton, saldo, kategorisering och summeringar
|
||||||
|
- Enable Banking-integration för bankdata
|
||||||
|
- OIDC/Pocket ID-inloggning med stöd för grupper, e-post och domänfilter
|
||||||
|
- AI-stöd via Ollama för budget- och transaktionshjälp
|
||||||
|
- Ntfy-notiser för nya transaktioner
|
||||||
|
- Installerbar PWA med offline-/cache-stöd
|
||||||
|
- JSON-baserad datalagring via lowdb
|
||||||
|
|
||||||
|
## Teknik
|
||||||
|
|
||||||
|
Klienten är byggd med React, Vite, Tailwind CSS och vite-plugin-pwa. Servern är en Express-app som använder lowdb för lokal JSON-lagring.
|
||||||
|
|
||||||
|
```text
|
||||||
|
client/ React/Vite-klient
|
||||||
|
server/ Express API, auth, bankintegration och datalagring
|
||||||
|
```
|
||||||
|
|
||||||
|
## Kom igång med Docker Compose
|
||||||
|
|
||||||
|
1. Kopiera exempelmiljön:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Uppdatera `.env` med dina värden, särskilt om du vill använda OIDC/Pocket ID:
|
||||||
|
|
||||||
|
```env
|
||||||
|
APP_BASE_URL=https://eb.example.com
|
||||||
|
AUTH_SESSION_SECRET=byt-till-en-lang-slumpad-hemlighet
|
||||||
|
SETUP_TOKEN=byt-till-en-lang-slumpad-token
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Starta appen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d --build
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Öppna appen:
|
||||||
|
|
||||||
|
```text
|
||||||
|
http://localhost:7842
|
||||||
|
```
|
||||||
|
|
||||||
|
Docker Compose monterar appens data i volymen `data`, och servern använder som standard:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/app/data/budget.json
|
||||||
|
```
|
||||||
|
|
||||||
|
## Lokal utveckling
|
||||||
|
|
||||||
|
Installera beroenden separat för server och klient:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd server
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd client
|
||||||
|
npm install --include=optional
|
||||||
|
```
|
||||||
|
|
||||||
|
Starta servern:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd server
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Starta klienten i en annan terminal:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd client
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Vite proxyar `/api` till servern på `http://localhost:7843` i utvecklingsläge.
|
||||||
|
|
||||||
|
## Bygga klienten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd client
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
Bygget genererar PWA-ikoner från `client/public/icon.svg` och skriver produktionsfiler till `client/dist`.
|
||||||
|
|
||||||
|
## Miljövariabler
|
||||||
|
|
||||||
|
| Variabel | Beskrivning |
|
||||||
|
| --- | --- |
|
||||||
|
| `PORT` | Serverport. Docker använder `7842`. |
|
||||||
|
| `DB_PATH` | Sökväg till JSON-databasen. |
|
||||||
|
| `APP_BASE_URL` | Publik bas-URL för CORS och callback-flöden. |
|
||||||
|
| `AUTH_SESSION_SECRET` | Hemlighet för auth-sessioner. Bör vara lång och slumpad. |
|
||||||
|
| `SETUP_TOKEN` | Engångs-/admin-token för initial auth-konfiguration när auth inte är aktiverat. |
|
||||||
|
| `OIDC_ISSUER` | OIDC issuer, exempelvis Pocket ID. |
|
||||||
|
| `OIDC_CLIENT_ID` | OIDC client ID. |
|
||||||
|
| `OIDC_CLIENT_SECRET` | OIDC client secret. |
|
||||||
|
| `OIDC_REDIRECT_URI` | Callback-URL, exempelvis `https://eb.example.com/auth/callback`. |
|
||||||
|
| `OIDC_SCOPE` | OIDC scopes. Standard: `openid profile email groups`. |
|
||||||
|
| `OIDC_ALLOWED_GROUPS` | Kommaseparerad allowlist för grupper. |
|
||||||
|
| `OIDC_ALLOWED_EMAILS` | Kommaseparerad allowlist för e-postadresser. |
|
||||||
|
| `OIDC_ALLOWED_DOMAINS` | Kommaseparerad allowlist för e-postdomäner. |
|
||||||
|
|
||||||
|
Se `.env.example` för ett komplett exempel.
|
||||||
|
|
||||||
|
## Data och säkerhet
|
||||||
|
|
||||||
|
Appdata lagras i `server/data/budget.json` vid lokal körning, eller i Docker-volymen `data` vid Compose-körning. Den filen kan innehålla privat budgetdata, auth-inställningar, sessionsdata, bankmetadata och tokens.
|
||||||
|
|
||||||
|
Därför ignoreras följande av git:
|
||||||
|
|
||||||
|
- `server/data/`
|
||||||
|
- `.env` och lokala miljöfiler
|
||||||
|
- `node_modules/`
|
||||||
|
- `client/dist/`
|
||||||
|
- lokal editor-/agentkonfiguration
|
||||||
|
|
||||||
|
Checka inte in riktiga secrets, banknycklar eller produktionsdata.
|
||||||
|
|
||||||
|
## Enable Banking
|
||||||
|
|
||||||
|
Enable Banking-konfiguration görs i appens inställningar. För produktion behöver du normalt:
|
||||||
|
|
||||||
|
- Application ID
|
||||||
|
- Private key PEM
|
||||||
|
- Redirect URL
|
||||||
|
- Val av land, bank och konton
|
||||||
|
|
||||||
|
Callback-route för bankflödet är:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/enablebanking/auth_callback
|
||||||
|
```
|
||||||
|
|
||||||
|
## OIDC / Pocket ID
|
||||||
|
|
||||||
|
OIDC kan konfigureras via miljövariabler eller via appens auth-inställningar. När auth är avstängt krävs `SETUP_TOKEN` för att ändra auth-konfigurationen via API, så en publik instans inte kan tas över av första besökaren.
|
||||||
|
|
||||||
|
Vanlig callback-route:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/auth/callback
|
||||||
|
```
|
||||||
|
|
||||||
|
## AI via Ollama
|
||||||
|
|
||||||
|
AI-funktionerna använder Ollama och kan aktiveras i appens inställningar. Standardvärdet för Ollama är:
|
||||||
|
|
||||||
|
```text
|
||||||
|
http://host.docker.internal:11434
|
||||||
|
```
|
||||||
|
|
||||||
|
Du kan välja textmodell, visionmodell och om budget- eller bankkontext ska skickas med i AI-frågor.
|
||||||
|
|
||||||
|
## Notiser
|
||||||
|
|
||||||
|
Appen har stöd för ntfy-notiser om nya transaktioner. Konfigurationen finns i appinställningarna och kan användas med egen ntfy-server eller `https://ntfy.sh`.
|
||||||
|
|
||||||
|
## Underhåll
|
||||||
|
|
||||||
|
Praktiska kommandon:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Visa containerloggar
|
||||||
|
docker compose logs -f app
|
||||||
|
|
||||||
|
# Bygg om och starta om
|
||||||
|
docker compose up -d --build
|
||||||
|
|
||||||
|
# Stoppa appen
|
||||||
|
docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
För npm-säkerhetskontroll:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd client
|
||||||
|
npm audit
|
||||||
|
|
||||||
|
cd ../server
|
||||||
|
npm audit
|
||||||
|
```
|
||||||
|
|
||||||
|
## Repository
|
||||||
|
|
||||||
|
Remote är tänkt att ligga på:
|
||||||
|
|
||||||
|
```text
|
||||||
|
https://git.bitli.se/siliconsolder/enkelbudget.git
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user