Changelog
Everything that changes in Orbitly. Newest first.
v0.5.0 Landing redesign + Telegram bot UX
#What's new
Landing
- Full redesign of
/ruand/en. 10 sections: Hero, HowItWorks (3 steps), SocialProof, Features, UseCases, WhyUs, PricingTeaser, FAQ, FinalCTA, Footer. - New positioning: "Voice-first AI assistant for your whole life" (instead of generic "productivity tool").
- Tone unified to informal across all landing strings.
Telegram bot
- "My Data" now covers all 9 orbits: tasks, notes, journal, habits, events, goals, finance, health, bookmarks.
- Rich "My Day": time-aware greeting + events + top tasks + habits + recent health + today's spending.
- Quick-log shortcuts under "My Day": 💧 +Glass of water (instant), 🔄 Refresh.
/helprewritten with workflow examples (voice/photo/forward/url/commands).- New
/languagecommand — switch interface between RU/EN.
Language sync
users.languageis now the single source of truth: web, JWT, Telegram bot.- Login redirect uses stored locale (was Accept-Language header).
- Profile change → DB + session update + URL navigation in one call.
Fixed
- HowItWorks grid overlap (
grid-template-areasmissing for desktop). - Header transparent overlay — text from sections was bleeding through. Replaced with solid color.
- Features bento layout (5 cards on a 4×2 grid → empty cells, uneven heights). Replaced with equal auto-fit grid.
- Pricing page for anonymous visitors now uses marketing shell (Header+Footer), not app sidebar.
- Full redesign of
v0.4.0 Telegram bot QA round
#What's new
Telegram bot — fast paths
- Regex extractors for obvious commands: "slept 7 hours", "weight 75", "8000 steps", "mood 7". Bypass LLM entirely, save AI quota, fire in <100ms.
- Journal pre-route: "Записать в дневник: ...", "Dear diary", "End of day" — instant write without brain LLM.
- Brain Undo button — after a voice message that creates tasks/notes/events, an "↶ Undo" button appears (5-minute TTL).
DB
health_entries.valuemigrated fromINTEGERtoREAL— decimal support (sleep 7.5h, weight 75.3kg).
Fixed
- HMR double-registration of Telegraf handlers — root cause of duplicated tasks. Each dev hot-reload was appending another full set of
bot.on('message', ...)subscriptions on top of the old ones. Fixed viaglobalThissingleton (same pattern as the DB client). - /start greeting: linked users now get "Welcome back, Pavel!" instead of "link your account" instructions.
- /help: dropped dead commands
/morningand/ask(never registered). - Health prompt in stt-service: stronger few-shot examples + hard rule "keyword + number → ALWAYS log_metric, never unknown".
- Brain prompt in stt-service: anti-context-leak rules — context is an RO snapshot, not an actions source. No more "Lose 2kg" / "Work at Yandex" zombies from user memory.
v0.3.0 Profile re-architect + Memory facts
#What's new
Profile (4 tabs)
- Full re-architect of
/app/profile: 4 tabs (Profile, Activity, AI, Settings) instead of one long list. - Sticky tab nav under the header — stays visible when scrolling.
- "Timezone" field is now a select from ~22 IANA TZs (was a freeform input).
- "Username" shows placeholder "Not set" instead of literal
@—.
AI Memory
- Confidence filter for trait facts: AI-extracted traits below 80% confidence are hidden (previously everything was shown, including false-positive "Hasn't completed tasks for weeks" at 75%).
- Inline editing for preference facts (✎ → ✓/✕, Enter/Escape).
confidenceStars(): 60→1⭐, 90+→5⭐ as a visual indicator.
Achievements → "Milestones"
- The old 7/19 grid felt demotivating. Now showing only unlocked + "N more ahead — keep going" label.
- 4 tiers: bronze/silver/gold/diamond with a colored dot.
Fixed
- Pro mismatch in admin: dashboard and table counted differently (one with expiry, one without).
- Mood chips in insights rendered
Journal.moodGood ×3literally — i18n namespace mismatch. - Goal cards invisible (
var(--card)undefined) — added shadcn alias in globals.scss. - DB connection accumulation in dev (43 idle connections after a few hours) — HMR-safe globalThis singleton for postgres-js client.
- Full re-architect of
v0.2.0 Insights, rich dashboard, admin analytics
#What's new
Insights (Stage 1-4)
- Cross-orbit weekly digest on
/app/insights: AI-generated week recap from pre-computed facts (sleep avg, tasks completed, mood distribution, finance summary). - 4 stages: facts engine → narrative → predictive nudges → memory facts auto-extract.
- On top — JS correlations (Pearson, mean comparison) — pure stats, no AI.
Dashboard (Stages 0-3)
- Time-aware greeting by name, AI suggestions from memory facts, Today hero with events/tasks/habits/health, sparklines on overview cards (7-day daily counts), AI Chat shortcut.
- Daily roundup card — time-aware (evening or activity).
Admin (Stage A+B)
- Analytics sections: signups time-series, DAU/WAU/MAU, top AI users, conversion funnel.
- Confirm dialogs for destructive actions.
Fixed
- Mood chips in insights used wrong i18n namespace.
- Orbit badges in sidebar showed raw EN keys (JOURNAL/FINANCE) — added
ORBIT_I18N_KEYSmap. - Tags page right panel empty — fixed with sticky positioning.
- Habits heatmap invisible on light theme — replaced hardcoded rgba with theme-aware var.
- Cross-orbit weekly digest on
v0.1.0 First release
#What's inside
First public release of Orbitly — a Personal OS for one user.
Modules
- Time — tasks, calendar, events
- Wealth — finance, budgets, categories, accounts
- Vitality — sleep, weight, steps, mood, energy, water
- Mind — notes, journal, AI Chat
- Identity — goals, habits, achievements
Telegram bot
- Voice message → STT → AI parsing → DB record
- Receipt photo → OCR → transaction
- Forward message → note
- URL → bookmark with preview
Web app
- Dashboard with overview of all modules
- Sidebar navigation across orbits
- Dedicated page per module
Stack
- Next.js 16 (App Router) + React 19
- Drizzle 0.45 + Postgres
- NextAuth credentials
- Yandex SpeechKit for STT
- Yandex GPT for intent classification
- next-intl for i18n (RU + EN)