Skip to content

Repository files navigation

kanban-frontend

Vue 3 + Vite + Pinia SPA for the Kanban app. Drag-and-drop, markdown card descriptions, due dates, labels, checklists, light/dark theme, and an admin control panel.

Companion repos:

Run

npm install
npm run dev            # http://localhost:5173 (proxies /api → http://localhost:8080)

The dev server proxies /api to http://localhost:8080 (see vite.config.js), so run the backend on :8080 first.

Build

npm run build
npm run preview

Pages

  • /login, /register — public.
  • /boards — board list, create / rename / delete.
  • /boards/:id — board view with columns + cards. Drag cards within and across columns, drag columns. Click a card to open the modal: markdown description, due date, labels, checklist.
  • /admin — admin-only (role gated). List of users (promote / demote / delete) + all boards across users.

Stack

  • Vue 3 Composition API with <script setup>.
  • Vite, Pinia, Vue Router 4, Axios.
  • vuedraggable@next for drag-and-drop (use the :list prop — do not combine :model-value + @update:model-value + tag="transition-group" + a computed source array; that pattern deadlocks the page).
  • marked + DOMPurify for sanitized markdown rendering.

Styling

Pure custom CSS with a CSS-custom-property palette (paper, ink, accent, good, warn, label-1..8, shadow-card, etc), light + dark themes via data-theme on <html>, FOUC-prevention script in index.html, transitions fade and card. Respects prefers-reduced-motion. No UI kit, no Tailwind, no TypeScript.

Stores

  • auth — token + user (incl. role). Getters: isAuthenticated, isAdmin.
  • boardsboards[] + currentBoard (hydrated). Column mutations live here (they touch currentBoard.columns[]).
  • cards — card CRUD + cross-column move + label attach/detach + checklist mutations. All optimistic with snapshot rollback.

Mutation failures surface via useToast().error(...). Snapshot rollback restores currentBoard to its pre-mutation state.

Wire format

  • Booleans (e.g. checklist.done) = integer 0 / 1 on the wire.
  • Dates = YYYY-MM-DD strings or null.
  • Errors = {"error": "<message>"}.
  • 404 on cross-user / cross-board; 403 on admin-only denial; 401 on missing/invalid token.

See the control-panel repo's doc/spec.md for the full API contract.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages