Skip to content

index

Overview

GINA Desktop is a lightweight standalone desktop assistant for the QiOS ecosystem.

Primary goals:

  • Always-on-top floating assistant
  • Voice or text input
  • Coherent retrieval from Supabase
  • Read/write/update structured records
  • ADHD-friendly low-friction UX
  • Fast local-feeling interaction
  • Minimal dependencies on full QiOS infrastructure

This is intentionally a thin client MVP, not the full orchestration stack.


MVP Requirements

GINA Desktop must:

  • Float above other windows
  • Accept typed or spoken input
  • Retrieve relevant context from Supabase
  • Generate coherent responses using LLM context injection
  • Save/update notes and memory objects
  • Operate independently of the full QiOS backend

MVP Architecture

┌────────────────────┐
│   GINA Desktop     │
│  (Tauri + React)   │
└─────────┬──────────┘
          │
          ├── Supabase-js
          │      ├── semantic_profile
          │      ├── gina_journal
          │      └── future tables
          │
          └── OpenAI API
                 └── Chat Completion

Layer Technology
Desktop Shell Tauri
Frontend React + TypeScript
Build Tool Vite
Database Supabase
AI OpenAI
STT Web Speech API (initial)
Styling TailwindCSS
State React state initially
Packaging Tauri Build

QiLabs/
└── apps/
    └── gina_desktop/

Folder Structure

gina_desktop/
├── package.json
├── vite.config.ts
├── tauri.conf.json
├── .env.local
├── src/
│   ├── main.tsx
│   ├── App.tsx
│   ├── styles/
│   ├── lib/
│   │   ├── supabaseClient.ts
│   │   ├── openaiClient.ts
│   │   ├── askGina.ts
│   │   ├── speech.ts
│   │   └── ginaPrompt.ts
│   ├── components/
│   │   ├── FloatingShell.tsx
│   │   ├── MicButton.tsx
│   │   ├── MessageList.tsx
│   │   ├── InputBar.tsx
│   │   └── SettingsPanel.tsx
│   └── types/
│       └── index.ts
└── src-tauri/

.env.local

VITE_SUPABASE_URL=
VITE_SUPABASE_SERVICE_KEY=
VITE_OPENAI_API_KEY=

Required Tables

semantic_profile

Used for contextual retrieval.

Minimum recommended columns:

id uuid primary key
title text
chunk_index integer
content text
summary text
tags text[]
created_at timestamptz
updated_at timestamptz

gina_journal

Used for assistant-created notes.

create table if not exists gina_journal (
    id uuid primary key default gen_random_uuid(),
    created_at timestamptz default now(),
    updated_at timestamptz default now(),
    author text,
    title text,
    body text,
    tags text[]
);

Flow

User Input
    ↓
Speech-to-Text
    ↓
Query Supabase
    ↓
Inject Context into Prompt
    ↓
OpenAI Completion
    ↓
Display Response
    ↓
Optional Save to Supabase

Initial Retrieval Strategy

MVP uses text similarity:

.ilike('content', `%${query}%`)

This is temporary.


Future Upgrade

Replace with:

  • pgvector
  • embeddings
  • semantic ranking
  • graph retrieval
  • hybrid search

Structure

SYSTEM:
GINA personality + operational rules

CONTEXT:
Relevant semantic_profile rows

USER:
Actual user message

Context Injection Rules

  • Limit to ~10 chunks
  • Truncate oversized context
  • Preserve source attribution
  • Prefer recent records
  • Avoid duplicate chunks

Allowed Operations (MVP)

Operation Allowed
Read semantic_profile YES
Create journal notes YES
Update journal notes YES
Delete journal notes YES
Arbitrary SQL NO
Schema modification NO

IMPORTANT

This is currently a trusted local desktop application.

The MVP may temporarily use:

VITE_SUPABASE_SERVICE_KEY

This is acceptable ONLY if:

  • app is local-only
  • not publicly distributed
  • not browser-hosted

Future Security Upgrade

Later versions should:

  • proxy through local_core
  • use signed auth
  • use RLS
  • use scoped service accounts
  • remove browser-visible keys

UX Priorities

MUST HAVE

  • Extremely low friction
  • Minimal clicks
  • Floating utility feel
  • Fast perceived response
  • Keyboard-first
  • ADHD-friendly
  • Persistent availability

Avoid

  • Modal overload
  • Settings clutter
  • Complex navigation
  • Multi-window workflows
  • Excessive animations

Required

Behavior Status
Always-on-top REQUIRED
Frameless REQUIRED
Resizable YES
Transparent OPTIONAL
Global hotkey FUTURE
Tray icon FUTURE

MVP Choice

Use browser-native speech recognition:

window.SpeechRecognition
window.webkitSpeechRecognition

Advantages:

  • fast
  • free
  • easy

Limitations:

  • browser dependent
  • inconsistent quality
  • internet-dependent

Future Upgrade Path

Possible replacements:

Engine Notes
Whisper.cpp Strong local option
faster-whisper Excellent
Deepgram Cloud
OpenAI realtime Future possibility

Phase 1 — Current MVP

Desktop → Supabase/OpenAI directly

Phase 2 — Local Core Gateway

Desktop → local_core → Supabase/OpenAI

Benefits:

  • central auth
  • unified orchestration
  • tool routing
  • memory control
  • logging
  • caching

Phase 3 — Full QiOS Agent

Desktop
    ↓
Orchestrator
    ↓
Workers
    ↓
RAG + Graph + Memory

MVP Logging

Create:

logs/

Store:

  • prompt logs
  • errors
  • retrieval failures
  • response latency
  • Supabase errors

Build Order

Phase 1

  • Floating window
  • Text input
  • Supabase retrieval
  • OpenAI responses

Phase 2

  • Speech input
  • Save notes
  • Journal browsing

Phase 3

  • Semantic retrieval
  • Embeddings
  • Graph memory

Phase 4

  • Tool calling
  • Scheduling
  • Calendar
  • Automation

Development

npm install
npm run tauri dev

Build

npm run tauri build

Expected Limitations

Limitation Reason
Weak retrieval No embeddings yet
Context overflow Simple chunk injection
No memory hierarchy MVP only
No agent tools Deferred
No auth isolation Trusted local app
STT quality inconsistent Browser API

GINA Desktop MVP succeeds if:

  • Cody can click and ask questions quickly
  • GINA can retrieve coherent Supabase context
  • GINA can save/update notes reliably
  • Interaction feels immediate and low-friction
  • Daily usage replaces scattered note-taking

Not success:

  • Full AGI orchestration
  • Perfect memory graph
  • Multi-agent ecosystem
  • Enterprise security
  • Autonomous workflows

Those come later.


This app is not the final architecture.

This is a stabilization layer.

The real purpose is:

give immediate operational relief and restore cognitive continuity.

That matters more right now than perfect architecture.

(No sub-items found)

(No sub-items found)