Tiny full-stack app that accepts arbitrary JSON submissions (no hard-coded schema) and shows them on a Vue UI with search across multiple forms. Backend is ASP.NET Core 8 + EF Core InMemory; frontend is Vue 3 (Vite) bundled to a single HTML file.
- .NET 8 minimal API with feature-sliced
Submissionsarea. - Endpoints:
GET /api/forms– list forms with counts.POST /api/forms/{formId}/submissions– save any JSON object payload.GET /api/forms/{formId}/submissions– list submissions for a form.GET /api/forms/{formId}/submissions/{submissionId}– fetch specific submission.
- Storage: EF Core InMemory; schema-less payload stored as JSON text.
Run locally:
dotnet run --project src/PlumSail.Api/PlumSail.Api.csproj
# API defaults: https://localhost:5001Tests:
dotnet test- Contact form with text, email, dropdown, date, radio, checkbox + message, with validation.
- Unified submissions list across all forms with search by payload, form id, or submission id.
- Styled layout and single-file production build (
frontend/dist/index.html).
Run dev:
cd frontend
npm install
npm run dev
# Uses VITE_API_BASE_URL (default https://localhost:5001)Build single-file bundle:
cd frontend
npm run build
# Output: frontend/dist/index.html (JS + CSS inlined)Build and run both API and frontend:
docker-compose build
docker-compose up
# API: http://localhost:5000
# Frontend: http://localhost:4173 (targets API via VITE_API_BASE_URL arg)- CORS allows Vite dev (5173) and compose frontend (4173).
- Swap EF InMemory for SQLite/file if persistence across restarts is needed.