gr8rstudio / gr8r-studio
git clone https://github.com/gr8rstudio/gr8r-studio.git
Gr8r Studio: a calm, structured project management workspace. Vite + plain ES modules.
+239
stars, 24h · #153
+~828
stars, 7 days · #261
+1.2k
stars, 30 days · #679
1.2k
★ total · +199% this week
267
forks · 5 open issues
Star history (as recorded here)
LanguageJavaScript
License—
Created2026-10-07 (16d ago)
Last push16d ago
Watchers6
OwnerUser
Links
- GitHub: github.com/gr8rstudio/gr8r-studio
- Homepage: https://gr8r-taskmanagement.vercel.app/
- Releases · Issues · Hacker News mentions
README excerpt
# Gr8r Studio
A calm, structured project management workspace: home dashboard, inbox, my tasks, projects with
board / list / table / calendar / timeline / files views, members, teams, activity and settings.
Built with plain JavaScript ES modules and CSS, bundled by Vite. There is no
UI framework and no runtime dependency.
## Getting started
Requires Node.js 18 or newer (`.nvmrc` pins 22).
[code]
## Project structure
[code]
### Layers
Dependencies point downward:
1. `core/` and `data/` depend on nothing else in the app.
2. `ui/`, `shell/`, `components/`, `pages/`, `views/`, `overlays/` and `features/` render HTML from state.
3. `actions/` change state and re-render. Each action module registers its handlers on the
shared action table (`A`) when it loads, so `main.js` imports them after `actions/actions.js`.
## Conventions
- **Rendering:** each page or view is a function that returns an HTML string from the store
(`S`). `render()` rebuilds the shell and keeps focus and scroll positions.
- **Interactions:** elements declare `data-a="actionName"`. `actions/events.js` delegates the
click to `A.actionName`. Inputs use `data-in`, blur handlers use `data-blur`.
- **Layout:** every page edge uses `var(--gutter)`, so the breadcrumb, page header, toolbar,
list, table and board start on the same line.
- **Dropdowns:** write a normal ` `. `ui/select.js` renders it as the
design-system menu and keeps the native element as the source of truth.
- **Icons:** call `ic('name')` with any Lucide icon name. The
`virtual:icons` plugin bundles only the icons the source uses.
## Continuous integration
Every push and pull request runs lint, the format check and a production build
(`.github/workflows/ci.yml`).
## Deploy
`vercel.json` builds with Vite and serves `dist/`.