Skip to content

Repository files navigation

PlumSail Schema-less Forms

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.

Backend (API)

  • .NET 8 minimal API with feature-sliced Submissions area.
  • 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:5001

Tests:

dotnet test

Frontend (Vue 3)

  • 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)

Docker / Compose

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)

Notes

  • CORS allows Vite dev (5173) and compose frontend (4173).
  • Swap EF InMemory for SQLite/file if persistence across restarts is needed.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages