The Problem

Teams need a lightweight, zero‑runtime‑dependency project‑management UI that can be deployed as a static site and can be customized without a heavy framework. The repo delivers a ready‑to‑run SPA that can be forked and tweaked for internal dashboards or as a demo for new clients.

What This Does

The application renders a project‑management workspace with a home dashboard, inbox, task lists, and multiple project‑view modes (board, list, table, calendar, timeline, files).

  • src/main.js pulls in src/styles/index.css and imports the routing and action modules.
  • src/shell/render.js builds the shell (sidebar, topbar, layout) and injects the current page or view.
  • src/pages/... modules export a function that returns an HTML string built from the global store (S).
  • src/views/... provide specialized renderers for board, calendar, etc.
  • src/actions/... modify S and trigger a re‑render via the event table A defined in src/actions/actions.js.
  • UI helpers in src/ui/ provide toasts, selects, and generic render functions.

The UI is built with plain ES modules and CSS; no React or Vue runtime is bundled. Icons are pulled from Lucide via the Vite virtual:icons plugin, so only used icons are bundled.

How It Is Wired

Entry point – index.html loads src/main.js.

  1. main.js imports src/styles/index.css and then src/actions/actions.js.
  2. actions/actions.js imports each actions/*.js module, each of which registers a handler on the shared action table A.
  3. main.js also imports src/shell/render.js, src/shell/view-engine.js, and the page modules.
  4. The router in view-engine.js listens to the URL hash and calls the appropriate page or view function.
  5. The page/view returns an HTML string; render() injects it into the shell, then dispatches a rendered event.
  6. actions/events.js attaches a delegated click handler to document.body; when an element with data-a="actionName" is clicked, A.actionName() executes, potentially updating the store and calling render() again.

Wiring hotspots –

  • src/actions/actions.js is the hub; most state changes flow through its table.
  • src/shell/render.js is the blast radius for UI changes; a single call rebuilds the whole DOM subtree.
  • src/core/store.js holds the immutable state; any function that mutates it (e.g., actions/teams.js) triggers a re‑render.

The graph is acyclic except for the action table’s self‑referencing A object, which is safe because handlers are pure functions.

How To Use It

Setup –

git clone https://github.com/moses-y/gr8r-studio
cd gr8r-studio
npm install

The .nvmrc pins Node 22, but the README accepts Node 18+.

Configuration – No environment variables needed; all data is in src/data/seed.js.

Running –

npm run dev      # http://localhost:5173, hot reload
npm run build    # dist/ production bundle
npm run preview  # serve the build locally

The build output is a static SPA; deploy dist/ to any static host or Vercel (via vercel.json).

Real‑World Use

A product‑manager can fork the repo, replace src/data/seed.js with their workspace JSON, and publish it on an internal portal. Because all logic lives in the browser, no API backend is required for a demo; switching to a real API would involve swapping out src/core/store.js and the action modules.

// Example: replace seed data
import { S } from './core/store.js';
S.projects = loadFromServer(); // fetch JSON, then re‑render

Code Health & Issues

  • Missing test suite – No __tests__ folder; all paths are untested.
  • No license – Repository lacks a LICENSE file; usage rights unclear.
  • CI – .github/workflows/ci.yml runs lint, format check, and a production build, but does not run tests.
  • Documentation – Only README.md and a screenshot; no API docs or component description.

These observations come from scanning the file tree and CI configuration; no static analysis run has been performed.

The Bottom Line

Gr8r Studio is a clean, framework‑free SPA that demonstrates a full project‑management UI in plain JavaScript. It is ideal for rapid internal demos or as a base for a custom static dashboard. However, the lack of tests, a license, and runtime support for server‑side data limits its use in production environments without further investment.