ITSUI.DEV

INIT
← Back to projects

Lumen

Interactive digital workspace built around projects, knowledge and data visualization. Lumen is a long-term project I'm currently building, centred on a single workspace where projects, tasks, notes and activity can be organised and explored. The frontend is built; the backend and the 3D layer are the next milestones.

YEAR2026
TYPElarge
STATUSin-progress
01

Technologies

ReactTypeScriptNext.js
02

Features

01

Dashboard that folds every project into one view: total projects, active ones, unique technologies and average progress.

02

Projects module with per-project status and progress, so unfinished work is visible without opening each project.

03

Tasks module for the work that belongs to a project rather than being a project itself.

04

Activity stream merging project, task and knowledge events into a single chronological feed.

05

Progress tracked across the whole workspace instead of per project, so the overview stays honest.

06

Planned: 3D workspace where projects, notes and productivity are represented spatially rather than as lists.

07

Planned: backend and persistence, which the current data layer is being shaped around.

03

Architecture

Next.js App Router frontend in TypeScript. Routes live in src/app, each screen is composed from src/components with CSS Modules, and project data sits in a typed layer in src/data. Dashboard figures are derived at render time from that data rather than stored, so the overview cannot drift from the underlying projects. There is no backend yet - the data layer is local and typed, which is the seam an API will plug into.

04

Challenges

  • 01
    Keeping derived dashboard figures in sync with the underlying data instead of duplicating them into a separate stats object.
  • 02
    Shaping a data layer that a real API can replace without rewriting the components that read it.
  • 03
    Deciding what belongs in the workspace overview and what belongs on an individual project page.
05

What I learned

  • 01
    Deriving state in one place instead of storing pre-computed totals.
  • 02
    Keeping components and their styles colocated with CSS Modules.
  • 03
    Typing the data layer so a future backend has a contract to satisfy.
06

Preview