尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Modern e-tjänsteplattform för svenska kommuner - Spring Boot backend + Next.js frontend
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A modern e-service platform for Swedish public administration: a rewrite of Open-ePlatform (2016 codebase) on current technology and current law (GDPR, the archives act, the DOS act/WCAG 2.1 AA).
Status: demo. The platform runs as a public demo on Vercel. It is not ready for production: there is no e-legitimation yet and a few gaps remain. See EXPERIMENTAL_STATUS.md.
Demo: https://e-plattform.vercel.app — log in by picking a persona and
entering the demo access code (the DEMO_ACCESS_CODE variable in the Vercel
project). API documentation: https://e-plattform.vercel.app/swagger-ui/index.html
| Role | Persona | Can |
|---|---|---|
Citizen (USER) | [email protected] | Find e-services, fill in multi-step forms with conditional fields and attachments, follow their cases and message the case worker |
Case worker (MANAGER) | [email protected] | Handle incoming cases: assign, change status according to the e-service's rules, message the applicant, write internal notes, export PDF |
Administrator (ADMIN, FLOW_EDITOR) | [email protected] | Build e-services (steps, fields, conditions, statuses, retention period), categories, users, statistics |
Information security & data protection (SECURITY_OFFICER) | [email protected] | Search and export the tamper-evident audit log, register extracts, erasure requests, retention (gallring) |
IT & operations (OPERATIONS) | [email protected] | Component status, response times, cold starts, scheduled jobs and the technical system log (no personal data) |
In the demo each visitor who logs in as a citizen gets an isolated account,
removed after DEMO_RETENTION_DAYS days.
Browser ──▶ Vercel (fra1)
├── frontend Next.js 15, React 19, Tailwind (service "frontend")
└── /api/v1/* Spring Boot 3.2, Java 21, container (service "backend")
├── Neon Postgres (fra1) cases, flows, audit log
└── Vercel Blob, private (fra1) attachments
vercel.json). /api/v1/*, /swagger-ui and /api-docs go to the
backend, everything else to the frontend.backend/Dockerfile.vercel) with a Class Data
Sharing archive for faster cold starts. It scales to zero after 5 minutes
without traffic; the first request after that takes about 13 seconds. An
open tab keeps it warm.backend/src/main/resources/db/migration) run
when an instance starts.Locally the same code runs against Postgres and MinIO in Docker Compose.
Requirements: Docker Desktop, Node.js 22, and Java 21 if you run the backend outside Docker.
cp .env.example .env
make dev # Postgres, MinIO, Mailpit, API, frontend, Prometheus, Grafana
| Frontend | http://localhost:3000 |
| API | http://localhost:8080 |
| API documentation | http://localhost:8080/swagger-ui/index.html |
| MinIO console | http://localhost:9001 |
| Mailpit (e-mail) | http://localhost:8025 |
| Grafana | http://localhost:3001 |
Without Docker for the application itself:
make infra # Postgres, MinIO and Mailpit only
make backend # Spring Boot on :8080 (needs JDK 21)
make frontend-install && make frontend # Next.js on :3000
Locally no access code is required and all personas are shared accounts.
| What | How | In CI |
|---|---|---|
| Backend (49 integration tests with Testcontainers: access control, case handling, audit chain, register extract, erasure, retention, tagged PDF, sessions …) | cd backend && gradle test | ✅ |
| Frontend lint, types and build | cd frontend && npm run lint && npm run type-check && npm run build | ✅ |
| Accessibility, WCAG 2.1 AA (31 Playwright + axe-core tests: all page types per role, every form step, dialogs, keyboard, page titles, reflow) | start the stack, then cd frontend && npm run test:a11y | ✅ |
Gradle 8.6 does not run on JDK 22 or later. With a newer local JDK, run the backend tests in Docker:
cd backend
docker run --rm -v "$PWD":/app -w /app -v /var/run/docker.sock:/var/run/docker.sock \
-e TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal gradle:8.6-jdk21 gradle test
CI (.github/workflows/ci.yml) runs all three jobs on every pull request and
on main.
Pushing to main deploys production; every pull request gets a preview
deployment. Preview deployments use the same Neon database as production.
Environment variables in the Vercel project:
| Variable | Purpose |
|---|---|
PG* (from the Neon integration) | Database connection |
BLOB_READ_WRITE_TOKEN / BLOB_STORE_ID (from the Blob integration) | File storage |
JWT_SECRET | Token signing key, at least 32 characters |
CRON_SECRET | Authorises the nightly cron jobs |
APP_DB_USER / APP_DB_PASSWORD | The application connects as eplatform_app (migration V14), which owns nothing and is bound by row level security. Set LOGIN and the password on the role by hand; until then it falls back to the owner role from the Neon integration. Flyway always runs as the owner (PG*) |
RETENTION_DB_PASSWORD | Password of the database role eplatform_retention, which can only run the gallring procedures (migration V9). Set it on the role by hand (ALTER ROLE eplatform_retention LOGIN PASSWORD …); without it gallring refuses to run |
DEMO_ACCESS_CODE | Code visitors enter before logging in |
DEMO_ISOLATED_CITIZENS | true: every citizen visitor gets their own account |
DEMO_RETENTION_DAYS | Days before demo accounts are removed (default 7) |
EMAIL_ENABLED | E-mail notifications; off in the demo |
AGPL-3.0, like Open-ePlatform.
Disclaimer: provided "as is" without warranty of any kind. Not ready for production use.