A minimalist app for counting down to the goals and events that matter. Runs as a native desktop app (Tauri 2 + Svelte 5) or as a web app via Docker.
- Countdown timers — live days/hours/minutes/seconds view for each event
- Timeline view — visual progress bar from event creation to target date with stage and comment markers
- Stages — add milestones to any event and mark them complete
- Activity log — searchable, filterable history of all comments and stage updates across every event
- Quick comments — log a note against any event in one keystroke
- Notifications — configurable OS notifications (7d / 3d / 1d / 12h / 1h before, and on stage completion)
- Categories & Priorities — fully configurable, each with a custom colour
- Dark / Light mode — toggle in the sidebar header, persisted across sessions
- Collapsible sidebar — collapse the event list to keep just the countdown on screen
- Data stored locally — events saved as Markdown files with YAML front-matter; nothing leaves your machine
No Rust or system dependencies required — just Docker.
# Clone and start
git clone https://github.com/fortsol-sys/nominous.git
cd nominous
docker compose up --build
# → http://localhost:3005In web mode the app stores events and settings in browser localStorage instead of the filesystem. Export and backup actions trigger a browser download. All other features work identically to the desktop build.
To add sibling services (API, database, etc.) edit docker-compose.yml — the commented stubs at the bottom are a starting point.
| Dependency | Version | Notes |
|---|---|---|
| Node.js | 18 + | LTS recommended |
| Rust | stable | via rustup |
| Tauri system deps | — | platform-specific, see below |
sudo apt update
sudo apt install -y \
libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libxdo-dev \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-devFor other distros, consult the Tauri prerequisites page.
Install Xcode Command Line Tools:
xcode-select --installInstall the Microsoft C++ Build Tools (select the "Desktop development with C++" workload), then install WebView2 if it isn't already present (it ships with Windows 11 by default).
# 1. Clone
git clone https://github.com/fortsol-sys/nominous.git
cd nominous
# 2. Install JS dependencies
npm install
# 3. Development (hot-reload)
npm run tauri dev
# 4. Production build
npm run tauri buildThe production binary and installer are placed in src-tauri/target/release/bundle/.
| Platform | Output formats |
|---|---|
| Linux | .deb, .rpm, AppImage |
| macOS | .dmg, .app |
| Windows | .msi, NSIS installer |
nominous/
├── src/ # Svelte frontend
│ ├── App.svelte # Root layout, theme, modals
│ ├── app.css # Global CSS variables (dark + light themes)
│ └── lib/
│ ├── components/
│ │ ├── EventList.svelte # Collapsible sidebar
│ │ ├── EventCard.svelte # Sidebar event row
│ │ ├── RightPanel.svelte # Main area (countdown / timeline)
│ │ ├── CountdownView.svelte # Live ticking countdown
│ │ ├── TimelineView.svelte # Visual timeline with stages
│ │ ├── AddEventModal.svelte # Create / edit event
│ │ ├── LogCommentModal.svelte # Quick comment entry
│ │ ├── SettingsPanel.svelte # Categories, priorities, activity log link
│ │ └── LogsPanel.svelte # Aggregated activity log
│ ├── stores/
│ │ └── app.ts # Svelte writable store — global app state
│ ├── storage.ts # Storage abstraction (Tauri invoke ↔ localStorage)
│ └── types.ts # Shared TypeScript types
├── src-tauri/ # Rust / Tauri backend
│ ├── src/
│ │ ├── lib.rs # Plugin registration, command handler list
│ │ ├── commands.rs # IPC commands (CRUD events, settings, notifications)
│ │ └── models.rs # Serde structs (Event, Stage, LogEntry, Settings…)
│ ├── capabilities/
│ │ └── default.json # Tauri 2 capability grants
│ └── tauri.conf.json # App metadata, window config, CSP
├── Meta/
│ └── Spec.md # Original product specification
├── Dockerfile
├── docker-compose.yml
├── nginx.conf
├── .dockerignore
├── package.json
└── vite.config.ts
Events are stored as individual Markdown files under the platform app-data directory:
| Platform | Path |
|---|---|
| Linux | ~/.local/share/com.nominous.app/events/ |
| macOS | ~/Library/Application Support/com.nominous.app/events/ |
| Windows | %APPDATA%\com.nominous.app\events\ |
Each file uses YAML front-matter:
---
id: "uuid-v4"
name: "Launch v1.0"
target_date: "2025-12-31T09:00:00"
category: "Work"
priority: "High"
stages:
- id: "..."
title: "Write tests"
completed: false
log:
- timestamp: "2025-06-01T10:30:00Z"
kind: "comment"
content: "Kicked off the sprint."
---
Optional freeform notes go here.Settings (categories, priorities, notification defaults) are stored in settings.json in the same app-data directory.
| Layer | Technology |
|---|---|
| Frontend | Svelte 5 + TypeScript |
| Build tool | Vite 6 |
| Desktop shell | Tauri 2 |
| Backend language | Rust (stable) |
| Serialisation | serde + serde_yaml + serde_json |
| IDs | uuid v4 |
| Date/time | chrono |
| Notifications | tauri-plugin-notification |
| Web storage | Browser localStorage (web/Docker mode) |
| Container | Docker + nginx (web mode) |
Pull requests are welcome. Please open an issue first for anything beyond a small bug fix.
MIT
