Date: 2026-02-21 Scope: apps/oshun/web, apps/oshun/bff, domain
libraries (libs/tara, libs/arete, libs/veritas, libs/nyx), shared
libraries (libs/shared, libs/psyche)
Executive Summary#
The OSHUN web app is a Next.js 14+ application that serves as the unified shell for four domains: Tara (meditation), Arete (personal growth), Veritas (news/research), and Nyx (astronomy). The web app currently exposes only a surface-level fraction of the capabilities that exist in the underlying domain libraries. Across all four domains, the libraries contain hundreds of modules — sophisticated AI coaching, gamification engines, habit systems based on published behavioral science frameworks, news verification agents, astronomy catalogs, and more — yet the web UI presents each domain as little more than a static card layout with hardcoded mock data.
Additionally, the UI suffers from significant design quality issues: inconsistent visual hierarchy, amateurish component styling (inline styles, flat layouts, no iconography, no micro-interactions), and a lack of the polish expected from a professional product.
Part 1: Domain Feature Gap Analysis#
1.1 Tara — Meditation & Mindfulness#
What the web app currently shows:
- A hero section with hardcoded stats (streak, today, weekly, sessions)
- A featured session card with title/description/tags
- A static session library grid (6 sessions)
- A courses list with 3 hardcoded courses + progress bars
- Quick actions (resume, breathwork, courses, favorites)
- Two overlay components: BreathworkTimer (functional box breathing) and SessionPlayer (basic timer)
What exists in libs/tara/ but is NOT exposed:
| Library | Description | Status in UI |
|---|---|---|
@tara/analytics |
10+ analytics modules (usage, engage) | Not exposed |
@tara/content |
Content management system | Not exposed |
@tara/database |
Domain-specific data models | Not exposed |
@tara/monitoring |
Health and performance monitoring | Not exposed |
@tara/features |
Feature flagging system | Not exposed |
@tara/ui (full suite) |
Complete component library with themes | Partially |
Specific feature gaps:
- No real session library — The session list is hardcoded. No search, filter, category browse, or sort controls.
- No course detail view — Clicking a course does nothing. No lesson list, no progress within lessons.
- No favorites system — The "Favorites" quick action exists but there's no favorites view.
- No session history — No way to see past sessions, completed courses, or duration trends.
- No instructor profiles — Sessions mention "Sage" but there's no instructor detail.
- No timer customization — The breathwork timer only does 4-4-4-4 box breathing. No alternate patterns (4-7-8, Wim Hof, custom).
- No ambient audio — No background soundscapes or audio accompaniment.
- No daily meditation reminder/prompt — Unlike Arete's check-in, Tara has no morning/evening mindfulness prompt.
- No meditation journal — No post-session reflection or notes.
- No community/social features — No shared sessions or group meditation.
- No streak detail — The "7 days" streak has no breakdown, no calendar view, no streak freeze/recovery.
1.2 Arete — Daily Growth & Personal Development#
What the web app currently shows:
- Dashboard stats (goals, habits, streak, journal entries)
- Daily check-in with rotating prompts
- Weekly summary (static)
- Goals list with progress bars (4 goals)
- Habit tracker with toggle (6 habits)
- Journal entries list (3 entries)
- AI coaching insights (3 static strings)
- Overlays: DailyCheckInOverlay, JournalOverlay, GoalsOverlay
What exists in libs/arete/ but is NOT exposed:
| Library | Description | Status in UI |
|---|---|---|
@arete/ai-coach |
Conversational AI coaching (CBT, goals) | Not exposed |
@arete/habits |
10-module habit engine (Atomic Habits) | ~5% exposed |
@arete/goals |
Goal management and alignment | ~10% exposed |
@arete/gamification |
Points, badges, leaderboards, challenges | Not exposed |
@arete/journal |
Journal with analytics, sentiment, NLP | ~5% exposed |
@arete/balance |
Work-life balance assessment | Not exposed |
@arete/affirmations |
Daily affirmations system | Not exposed |
@arete/time |
Time management (Pomodoro, time blocking) | Not exposed |
@arete/vision |
Vision statement and long-term planning | Not exposed |
@arete/seven-habits |
Covey's 7 Habits framework | Not exposed |
Specific feature gaps:
- AI Coach is invisible — The "AI coaching insights" section shows 3 static
strings. The
@arete/ai-coachlibrary has conversational coaching with CBT techniques, personalized recommendations, pattern recognition, and smart notifications — none of which are surfaced. - Habits lack depth — The habit tracker is a simple toggle list. The library supports Atomic Habits cue-routine-reward loops, habit stacking, Four Laws of Behavior Change, celebration/reinforcement mechanics, identity-based habits, keystone habits, and analytics dashboards.
- No gamification — The
@arete/gamificationlibrary provides points, badges, leaderboards, challenges, and reward mechanics. Zero of this is surfaced. - No affirmations — A complete affirmation system exists in the library.
- No time management — Pomodoro timer, time blocking, and calendar analysis features exist but aren't shown.
- No vision board — Long-term vision statements and goal planning are in the library.
- No 7 Habits integration — A full implementation of Covey's framework exists.
- No work-life balance tools — Energy management, recovery tracking, and balance assessment are built but hidden.
- No journal analytics — The library has sentiment analysis, emotion detection, topic extraction — but the UI just shows text excerpts.
- No goal creation — Users can't create, edit, or archive goals. The GoalsOverlay is basic.
- No habit creation — Can't add new habits. The list is hardcoded.
- No data visualization — No charts for trends, mood graphs, or habit completion heatmaps.
1.3 Veritas — Truth-First News & Research#
What the web app currently shows:
- Trending claims list with confidence badges (5 items)
- Reading queue (3 items)
- Topic alerts (4 topics)
- Source trust tiers (3 tiers)
- Overlays: ArticleReaderOverlay, ReadingQueueOverlay, SourceDirectoryOverlay
What exists in libs/veritas/ but is NOT exposed:
| Library | Description | Status in UI |
|---|---|---|
@veritas/agents (10+) |
Journalism, fact-check, QA, social agents | Not exposed |
@veritas/bias-detection |
Linguistic and coverage bias analysis | Not exposed |
@veritas/fact-checking |
Claim verification workflow | Not exposed |
@veritas/knowledge-graph |
Entity relationship management | Not exposed |
@veritas/rag |
Retrieval-augmented generation | Not exposed |
@veritas/story-clustering |
Automatic story correlation | Not exposed |
@veritas/ab-testing |
Experimentation framework | Not exposed |
@veritas/content-class |
Multi-dimensional content tagging | Not exposed |
@veritas/newsletter |
Newsletter generation | Not exposed |
@veritas/live-stream |
Live event coverage | Not exposed |
@veritas/payments |
Paywall and subscription | Not exposed |
@veritas/recommendations |
Content recommendation engine | Not exposed |
@veritas/regional |
Ghana-specific NLP and political data | Not exposed |
@veritas/article-versioning |
Article diff tracking | Not exposed |
@veritas/author-profiles |
Author verification and profiles | Not exposed |
@veritas/seo |
Search engine optimization | Not exposed |
Specific feature gaps:
- No claim detail view — Clicking a claim opens a generic overlay, not a detailed verification page showing evidence chains, sources, and confidence breakdown.
- No bias indicators — The library has sophisticated bias detection, but articles show no bias warnings or political alignment markers.
- No fact-checking workflow — Users can't submit claims for verification or follow verification trails.
- No knowledge graph — Entity relationships between stories, sources, and claims are available but not visualized.
- No article versioning — The library tracks article changes over time; this isn't shown.
- No author profiles — No author verification status, credentials, or publication history.
- No story clustering — Related stories aren't grouped together.
- No newsletter — Users can't subscribe to or generate topic digests.
- No live event coverage — Real-time story tracking isn't surfaced.
- No full-text search — The reading queue has no search functionality.
- No bookmarking with annotations — Can't add notes to saved articles.
- No content categories/taxonomy — Only 4 topic alerts with no browse UI.
- No regional/local news — Ghana-specific capabilities aren't surfaced.
- No "queue" button works correctly — The queue toggle on trending claims uses local state only; it doesn't persist.
1.4 Nyx — Night Sky Observatory#
What the web app currently shows:
- Tonight's highlights (3 items)
- Sky conditions panel (moon, sunset, Bortle, transparency, seeing)
- Upcoming events calendar (5 items)
- Observation log (3 entries)
- PWA install prompt for sky alerts
- Overlays: NightlyHighlightsOverlay, SkyMapOverlay, EventCalendarOverlay
What exists in libs/nyx/ but is NOT exposed:
| Library | Description | Status in UI |
|---|---|---|
@nyx/realtime-solar |
Solar activity, aurora forecasts | Not exposed |
@nyx/realtime-neo |
Near-Earth object tracking & impact risk | Not exposed |
@nyx/time-travel |
Historical and future sky calculations | Not exposed |
@nyx/education |
Curriculum and learning modules | Not exposed |
@nyx/catalogs (17+) |
Specialized astronomy catalogs | Not exposed |
@nyx/coordinates |
Multiple coordinate system support | Not exposed |
@nyx/analysis |
Spectral and orbital analysis | Not exposed |
@nyx/audio |
Sonification (data to sound) | Not exposed |
@nyx/visualization |
Multiple rendering backends | Not exposed |
@nyx/integrations |
External data source connections | Not exposed |
Specific feature gaps:
- No interactive star map — The "Sky map" overlay exists but is a placeholder. No canvas-based or WebGL star chart.
- No solar activity dashboard — Aurora forecasts, solar wind data, CME alerts exist in the library.
- No Near-Earth Object tracker — Impact risk assessment and NEO tracking are built but invisible.
- No time travel/historical view — "What did the sky look like on [date]?" is supported by the library.
- No education modules — Guided astronomy lessons exist in
@nyx/education. - No deep catalog access — 17+ specialized catalogs (Messier, NGC, IC, etc.) are inaccessible.
- No observation log creation — Users can't add new observations; the log is hardcoded.
- No sonification — Converting astronomical data to sound is a unique feature that exists but isn't exposed.
- No equipment profile — No telescope/binocular setup for personalized visibility recommendations.
- No location awareness — Sky conditions are hardcoded. No geolocation for accurate sunset/rise times.
- No moon phase detail — Just a text string; no visual lunar phase diagram.
- No constellation viewer — Multi-cultural constellation databases exist.
- No light pollution map — Bortle class is shown as a number; no visual map.
Part 2: Shared Library Capabilities NOT Surfaced#
2.1 @oshun/ai — AI/LLM Platform#
Provides quality routing, batch processing, prompt compression, A/B testing, sanitization, debugging, local LLM support, and budget management. None of this is surfaced in any domain UI for user-facing AI interactions.
2.2 @oshun/websocket — Real-time Features#
Room management, presence tracking, message queuing, and horizontal scaling are built. The web app has zero real-time features — no live updates, no presence indicators, no collaborative sessions.
2.3 @oshun/event-bus — Distributed Events#
Type-safe event publishing, dead letter queues, event persistence and replay. Not used for any user-facing live feed or event stream.
2.4 @psyche/ — AI Agent Platform (99+ libraries)#
The Psyche platform contains:
- Memory systems — Hierarchical memory, persistence, retrieval, consolidation, archival
- Avatar/Expression — FACS expressions, lipsync, emotion engine, micro-expressions
- Engagement — Multi-dimensional scoring, attention tracking, anomaly detection
- Screen analysis — 82+ analyzers for presentations, documents, spreadsheets, whiteboards
- Conversational — Dialogue management, TTS, voice streaming, turn-taking
- Knowledge — Context-aware retrieval, ingestion, semantic search
- Safety — Action safety checks, behavior coordination, uncanny valley detection
Zero of these are exposed in the web app. No AI assistant, no avatar, no voice interaction, no intelligent content analysis.
Part 3: UI/UX Design Audit#
3.1 Critical Design Issues#
A. No Icon System#
The entire app uses zero icons. Navigation ("Home", "Explore", "Activity", "Profile") is text-only. Domain quick actions are text-only buttons. There are no visual indicators for states (completed, in-progress, locked). This immediately makes the app feel like a developer prototype rather than a shipped product.
B. Flat Visual Hierarchy#
Every section looks the same: a dark bordered rectangle with a heading and text. There's no visual differentiation between:
- Primary actions vs. secondary
- Important content vs. supplementary
- Active/current state vs. future/past
- Different content types (video, audio, text, interactive)
C. Inline Styles on Interactive Components#
The BreathworkTimer, SessionPlayer, and overlay components use inline
style={{...}} objects throughout. This results in:
- Inconsistent styling between overlays and the main surface
- No hover/focus/active state management
- No responsive behavior
- No animation system integration
D. No Micro-interactions or Feedback#
- Button clicks have no visual feedback beyond cursor change
- Habit toggles switch instantly with no transition
- No loading skeletons; pages are either fully loaded or empty
- No success/error toasts
- No confetti/celebration for achievements or milestones
- Progress bars are static CSS widths with no animation
E. No Visual Brand Identity#
- No logo anywhere in the app
- No brand typography (using system "Avenir Next" / "Segoe UI")
- No illustration or imagery
- No empty state illustrations
- Domain surfaces lack unique visual identity beyond accent color
F. Amateur Navigation Pattern#
The ShellRouteNavigator is a row of small pill buttons at the top. This
pattern:
- Lacks standard webapp conventions (sidebar, top navbar with logo)
- Has no visual weight or hierarchy
- Doesn't show the current user or any global state
- Has no breadcrumb or back navigation from domain surfaces
- No mobile-responsive bottom tab bar equivalent
G. Color Monotony#
Despite the dark theme being an intentional choice, the execution lacks depth:
- Almost every surface uses the exact same
rgba(15, 23, 42, 0.8)background - Border colors are nearly identical across all components
- No gradient usage within cards or sections
- Text hierarchy relies solely on opacity (
#f8fafc,#cbd5e1,#7c93b3) — no size or weight variation enough
H. Empty State Handling#
When data is unavailable:
- The BFF fetch silently fails and shows hardcoded fallback data
- No "No data yet" empty states
- No onboarding guidance for new users
- No loading indicators during fetches
3.2 Responsive Design Issues#
- KPI grid breaks on mobile —
grid-template-columns: repeat(4, minmax(0, 1fr))doesn't wrap, so KPI tiles compress to unreadable sizes on small screens. - Split grids don't stack — Two-column layouts remain side-by-side below 768px.
- Domain surfaces lack mobile optimization — Stats grids, quick action rows, and list items don't reflow.
- No breakpoint-specific typography — The
clamp()on the title is the only responsive type scale. - Overlays are not mobile-friendly — Fixed position overlays don't account for viewport height variations or safe areas.
3.3 Accessibility Gaps#
While the app has basic ARIA labels and keyboard shortcuts, several gaps remain:
- No focus-visible styles — Keyboard navigation produces no visible focus indicator.
- Color-only information — Confidence badges (green/yellow/red) and visibility indicators convey meaning through color alone with no pattern or text alternative.
- No reduced motion respect —
@media (prefers-reduced-motion)queries exist for the overall shell but animations inBreathworkTimeruse inline styles that ignore this preference. - Habit toggle is div, not input — The habit row uses
onClickon an<article>with norole="checkbox"or keyboard handling. - No error announcements — Failed BFF requests don't announce to screen readers.
Part 4: Architecture & Code Quality Issues#
4.1 Hardcoded Mock Data Everywhere#
Every surface component (TaraSurface, AreteSurface, VeritasSurface,
NyxSurface) initializes with large hardcoded constant arrays that serve as
fallback data when the BFF is unavailable. This:
- Creates the illusion of a working app that is actually static
- Means users see fake metrics (streak "7 days", sessions "42 total")
- Masks data flow issues
4.2 Hardcoded BFF URL#
All domain surfaces use http://localhost:4010 directly. No environment
variable, no API client abstraction. This will break in any non-local
environment.
4.3 Hardcoded Auth Token#
The Bearer token dev.eyJzdWIiOiJ1MTIzIiwic2NvcGVzIjpbImRvbWFpbjoqIl19 is
embedded directly in every fetch call. No auth provider, no token refresh, no
session management.
4.4 No State Management#
Each surface manages its own local state with useState. There's no shared
state between surfaces, no cache, no optimistic updates, no state persistence.
Navigating away from a domain and back resets all state and re-fetches.
4.5 No Error Handling#
Every fetch call catches errors with console.error. No user-facing error
states, no retry logic, no offline handling despite the PWA setup.
4.6 No Data Fetching Layer#
No SWR, React Query, or equivalent. Each component manually manages fetch
lifecycle with useEffect + useState + try/catch.
4.7 No Component Library#
Every component is a one-off. There's no shared <Card>, <Button>, <Badge>,
<ProgressBar>, <StatTile>, <OverlaySheet>, or <EmptyState> component.
The same patterns are copy-pasted with slight variations across all surfaces.
Part 5: Recommendations Priority Matrix#
| Priority | Category | Impact | Effort |
|---|---|---|---|
| P0 | Design system & UI | 🔴 HIGH | 🟡 MED |
| P0 | Domain feature gaps | 🔴 HIGH | 🔴 HIGH |
| P1 | Navigation redesign | 🔴 HIGH | 🟡 MED |
| P1 | Data architecture | 🔴 HIGH | 🟡 MED |
| P1 | Responsive design | 🟡 MED | 🟡 MED |
| P2 | Psyche/AI integration | 🟡 MED | 🔴 HIGH |
| P2 | Real-time features | 🟡 MED | 🟡 MED |
| P2 | Accessibility fixes | 🟡 MED | 🟢 LOW |
Part 5: BFF Endpoint Gap Analysis (Deep Dive)#
The BFF service contains 130+ fully implemented endpoints across 7 major subsystems. The web app uses fewer than 10 of these. The following entire subsystems exist in the backend with ZERO web UI integration:
5.1 Achievement & Social Accountability System (17+ endpoints)#
The BFF has a complete AchievementEngine with:
- Achievement definitions, categories, tiers, domains
- User achievement tracking with unlock status
- Achievement evaluation and auto-unlock
- Unacknowledged achievement notifications
- Accountability partnerships — invite, accept, decline, end, check-in, encourage, health analysis
- Challenge system — templates, join, record daily progress, drop, leaderboards
- Partnership insights with engagement scoring
Impact: Users have no way to earn achievements, join challenges, or connect with accountability partners despite the entire backend being production-ready.
5.2 Routine Automation System (18+ endpoints)#
A complete RoutineEngine supports:
- Routine templates (morning, evening) with cross-domain steps
- Custom routine creation from templates
- Step-by-step routine execution (start, advance, pause, resume, abandon)
- Active execution tracking
- Execution history with statistics
- Scheduling (daily, weekdays, weekends, custom days)
- Multi-domain integration (Tara + Arete steps in one routine)
Impact: The "Daily Plan" on the home page is hardcoded text. The backend has a fully operational routine system that could power dynamic, personalized daily plans.
5.3 Voice-First Assistant System (4 endpoints)#
An AssistantEngine provides:
- Session management (create, message, list, end)
- Voice and text input modes
- Domain-aware context (Tara, Veritas, Nyx, Arete)
- Domain-specific tool integration (start sessions, save articles, log observations, check goals)
Impact: Zero AI assistant integration in the web app despite backend support.
5.4 Wearable Companion System (28 endpoints)#
A WearableEngine manages:
- Device registration (watchOS, WearOS, Fitbit, Garmin)
- Preferences (haptic intensity, quiet hours, streak alerts)
- Complications (watch face widgets)
- Smart reminders with dismiss/snooze
- Daily and weekly summary generation
- Cross-domain streak comparison
- Glanceable quick-reference summaries
Impact: Wearable features may seem non-web, but the stats, summaries, and streak comparisons could all be surfaced in the web dashboard.
5.5 Desktop Application System (30+ endpoints)#
A DesktopEngine provides:
- Focus mode toggle
- Window management with roles
- Global and app shortcuts
- Deep link handling and building
- Widget sidebar (add, remove, refresh)
- System snapshot and lifecycle events
- Update status and preferences
Impact: Desktop features like focus mode, widgets, and shortcuts could all be adapted for the web PWA.
5.6 Favorites Management (used minimally)#
GET /v1/favorites— Tara favorites with paginationPOST /v1/favorites/:meditationId— Add to favoritesDELETE /v1/favorites/:meditationId— Remove from favorites
Impact: The web app's Tara surface has a "Favorites" quick action but no favorites view or management UI. The BFF is ready.
5.7 Recommendation Feedback (not used)#
POST /v1/recommendations/feedback— Send signals (hide, less, more) for recommendations with optional reason
Impact: Users can't provide feedback on recommended content, preventing the recommendation engine from learning their preferences.
5.8 Session Audio (not used)#
GET /v1/sessions/:sessionId/audio?quality=...— Stream meditation audio in standard, high, or lossless quality
Impact: The SessionPlayer component simulates playback with a timer but has no actual audio integration despite the BFF endpoint being ready.
Part 6: Component-Level Quality Audit (Deep Dive)#
6.1 Overlay Component Issues#
All 10 overlay components share these systemic problems:
| Issue | Components Affected | Severity |
|---|---|---|
| All styles inline | All 10 | HIGH |
| No data persistence | All 10 | CRITICAL |
| No loading states | All 10 | HIGH |
| No error states | All 10 | HIGH |
| No accessibility labels | 8 of 10 | MEDIUM |
| No keyboard navigation | All 10 | MEDIUM |
| No focus trap inside overlay | All 10 | MEDIUM |
| No escape-to-close | 7 of 10 | LOW |
| Non-functional buttons | 6 of 10 | HIGH |
| Hardcoded content | All 10 | CRITICAL |
Specific bugs found:
GoalsOverlay.tsx: Variable typosetNewGoalTile(should besetNewGoalTitle) — persists throughout the fileGoalsOverlay.tsx: Goal IDs generated withDate.now()— race condition possibleDailyCheckInOverlay.tsx: Comment says "Save logic would go here" but no actual save endpoint is calledArticleReaderOverlay.tsx: "Save" and "Share" buttons have no onClick handlersSkyMapOverlay.tsx: Control buttons ("Constellations: On", "Grid: Off") are purely decorative — nothing togglesSessionPlayer.tsx: Forward/rewind buttons (↺ 15, 15 ↻) are non-functionalSessionPlayer.tsx: No actual audio element — progress is simulated with setIntervalReadingQueueOverlay.tsx:openReader()callback passes no article data — reader doesn't know what to displayNotificationsCenterPanel.tsx:now = Date.now()calculated at module level becomes stale in long sessions
6.2 Shell Component Issues#
- ProfileSettingsPanel.tsx: 800+ line monolith component — should be split into billing, privacy, preferences, and data rights sub-components
- ProfileSettingsPanel.tsx: Hardcoded dummy payment method creation with brand-flip logic (Visa → Amex alternation) for demo purposes
- UniversalSearchPanel.tsx:
getBaseRoutePath()function is incomplete — returns just/for unknown domains (would break navigation) - DomainStartupGate.tsx: Arbitrary 520ms delay before showing content with no explanation
- DomainLaunchFailureTelemetry.tsx: Missing dependency array on useEffect — runs on every render
- AccessibilityShell.tsx: Keyboard shortcut handler uses hardcoded CSS
selector
.searchInputWrap input— fragile if class names change - QuickActionsTrayPanel.tsx: Modal has no focus trap, no escape key handler, backdrop has no keyboard-accessible close
6.3 State Management Issues#
- observability/error-monitoring.ts: Sampling logic appears backwards —
Math.random() > sampleRatemeans higher sample rates capture FEWER errors - profile/store.ts: Multiple module-level mutable state flags for hydration tracking — not thread-safe in concurrent React 18 rendering
Part 7: Production Readiness Gaps#
7.1 Missing Critical Files#
| File | Purpose | Status |
|---|---|---|
error.tsx |
Global error page | MISSING |
not-found.tsx |
404 page | MISSING |
loading.tsx |
Loading skeleton UI | MISSING |
middleware.ts |
Auth redirects, rate limiting | MISSING |
robots.txt |
Search engine crawling directives | MISSING |
sitemap.xml |
URL sitemap for SEO | MISSING |
favicon.ico |
Browser tab icon | MISSING |
favicon.svg |
Modern vector favicon | MISSING |
.well-known/assetlinks |
Android app association | MISSING |
.well-known/apple-app |
iOS app association | MISSING |
7.2 Security Header Gaps#
| Header | Status | Risk |
|---|---|---|
| Content-Security-Policy | MISSING | CRITICAL |
| Strict-Transport-Security | MISSING | CRITICAL |
| X-Content-Type-Options | Present | — |
| X-Frame-Options | Present | — |
| X-XSS-Protection | Present | — |
| Referrer-Policy | Present | — |
| Permissions-Policy | Present | — |
7.3 Missing Infrastructure#
- No i18n/localization — Zero internationalization setup. No translation files, language detection, or RTL support.
- No Next.js middleware — No auth guards, no redirect logic, no request logging.
- No cookie consent banner — Missing for GDPR compliance.
- No accessibility statement — Missing for WCAG compliance.
- No authenticated user onboarding — Marketing welcome pages exist, but there is no post-signup wizard (domain selection, preferences, notifications).
- No CI/CD workflows — No GitHub Actions for e2e tests, Lighthouse CI, or deployment.
7.4 Mobile App Feature Parity Gaps#
Features that exist in the mobile app but NOT in the web app:
- Direct recommendation carousel from
/v1/recommendations - Full notification preferences management UI
- Push notification device token management
- Deep link hydration with full navigation state restore
- A/B testing framework integration
- Feature flag system integration
- Crash reporting with proper transport
- Runtime configuration provider
- Performance telemetry (app startup, route transitions)
- Offline queue provider with global offline banner
Part 8: Recommendations Priority Matrix (Updated)#
| Priority | Category | Impact | Effort |
|---|---|---|---|
| P0-CRIT | Security headers (CSP, HSTS) | 🔴 CRIT | 🟢 LOW |
| P0-CRIT | Error pages (error.tsx, 404) | 🔴 CRIT | 🟢 LOW |
| P0 | Design system & component lib | 🔴 HIGH | 🟡 MED |
| P0 | API client (kill hardcoded URL) | 🔴 HIGH | 🟢 LOW |
| P0 | Auth provider (kill dev token) | 🔴 HIGH | 🟡 MED |
| P0 | Domain feature gaps | 🔴 HIGH | 🔴 HIGH |
| P1 | Navigation redesign | 🔴 HIGH | 🟡 MED |
| P1 | Achievement/challenge system | 🔴 HIGH | 🟡 MED |
| P1 | Routine automation UI | 🔴 HIGH | 🟡 MED |
| P1 | Responsive design | 🟡 MED | 🟡 MED |
| P1 | Overlay component rewrite | 🟡 MED | 🟡 MED |
| P2 | AI Assistant integration | 🟡 MED | 🔴 HIGH |
| P2 | Recommendation feedback | 🟡 MED | 🟢 LOW |
| P2 | Wearable/Desktop feature adapt | 🟡 MED | 🟡 MED |
| P2 | Real-time features (websocket) | 🟡 MED | 🟡 MED |
| P2 | Psyche AI platform | 🟡 MED | 🔴 HIGH |
| P3 | i18n / localization | 🟢 LOW | 🟡 MED |
| P3 | Accessibility compliance | 🟡 MED | 🟢 LOW |
| P3 | CI/CD workflows | 🟡 MED | 🟢 LOW |
Conclusion#
The OSHUN web app is currently a thin shell sitting on top of an extraordinarily deep library and backend ecosystem. The mismatch between what exists (hundreds of sophisticated library modules, 130+ BFF endpoints across 7 subsystems, and a production-ready mobile app) and what users can actually interact with (static card layouts with hardcoded data, non-functional buttons, and inline-styled overlays) represents the single largest gap in the platform.
The backend is approximately 3x more feature-rich than what the web app exposes. Entire subsystems — achievements with social accountability, cross-domain routine automation, voice-first assistant, wearable companion, and desktop integration — are fully built but completely invisible to web users.
Beyond feature gaps, the app has critical production blockers: missing CSP and HSTS security headers, no error pages, no favicon, no middleware for auth guards, and no cookie consent for GDPR.
Addressing these gaps systematically — starting with security and infrastructure, then design system, then feature exposure — will transform this from a developer prototype into a professional, production-grade product.