From e83fd394b510ac43821ba32dbe046207a3b0fcbc Mon Sep 17 00:00:00 2001 From: michaelswanson Date: Thu, 25 Jun 2026 20:43:20 +0000 Subject: [PATCH] Add README --- README.md | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..ed52ae4 --- /dev/null +++ b/README.md @@ -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 +```