diff --git a/docs/landing.html b/docs/landing.html index fb28d2b..b4fb442 100644 --- a/docs/landing.html +++ b/docs/landing.html @@ -1,13 +1,1212 @@ - + + + + + +Trulana — Give AI context without giving it your data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
-Ideal for government and regulated industries — keep sensitive context local and compliant. On-device vault with query-time redaction. +
+
macOS Technical Preview
+ +

Trulana

+

Give AI context —
without giving it your data.

+

Trulana is a local-first private context server. Apps query your context and preferences over REST or MCP — only redacted answers leave the device. AI gets more useful over time without owning your data.

+
REST + MCP verified · 134 tests passing · Runs locally
+ +
+ Encrypted local vault + Structured preferences + MCP + REST access + Audit log + redaction +
+
- -
-

Ideal for government and regulated industries

-

Sensitive context stays local and compliant. On-device vault with query-time redaction.

+ +
+
+
What is Trulana?
+ +
+ + +
+
+ +

See the full flow in under a minute.

+

Authenticate an agent, run a live query, watch preferences and vault context get matched, then see redactions and audit logging happen in real time.

+
+
+
+
Dashboard
+
+
+ + Local vault running + strict +
+
+
+
Connected Agents
+
+
No agents connected
+
+
+
+
Audit Log
+
+
Waiting for requests...
+
+
+
+
+
+ trulana localhost:8432 + +
+
+
+ +
+ +
+
+
+ + +
+
+ +

AI that doesn't know you is useless.
AI that knows everything is dangerous.

+

Right now you have two choices. Give your apps zero personal context and get generic answers. Or hand over your emails, calendar, health data, and notes — and hope nobody leaks it, trains on it, or sells it.

+
+
+
Option A
+

No context

+

Every session starts from scratch. The AI doesn't know your name, your schedule, or what you asked yesterday.

+
+
+
Option B
+

Full access

+

Send everything to the cloud. Your data trains models, populates dashboards, and lives on servers you don't control.

+
+
+
+
+ + +
+
+ +

Apps get answers, not your data.

+

Trulana stores your personal context and structured preferences in an encrypted local vault. When an app needs to know something about you, it queries Trulana — and gets back a filtered, redacted response. Useful context accumulates over time, but the raw details never leave the device.

+

The app gets better answers the longer you use it. You keep control of the source material.

+
+
+ + +
+
+ +

Five steps. All local.

+
+
01

App requests access

An app sends an auth request with its name, ID, and stated intent.

+
02

Trulana issues a scoped token

Short-lived, in-memory, 15-minute TTL. Doesn't survive a restart.

+
03

App queries your local context

Trulana matches the request against your encrypted vault and structured preferences — on-device, before anything is returned.

+
04

The redaction engine runs

Three stages: regex PII stripping, entity recognition, privacy-level generalization. Emails, phones, SSNs, locations — all caught.

+
05

Filtered result returned

The app gets useful, personalized context with identifying details stripped. The raw data never moved.

+
+
+
+ + +
+
+ +

Built for people who build with AI.

+
+
+

Developers building AI apps

+

Need user context without storage liability? Query Trulana via REST or MCP and let useful preferences accumulate locally — without turning your app into a surveillance database.

+
+
+

Consultants & professionals

+

Use AI with client data, NDAs, and sensitive materials — without sending any of it to a cloud provider.

+
+
+

Privacy-aware power users

+

Get the "AI that knows you" experience without the tradeoff. Your context, your device, your rules.

+
+
+
+
+ + +
+
+ +

AI agents for compliance-first teams.

+
+

Trulana runs a local encrypted context server so government teams can use AI agents without sending PII or sensitive data to cloud providers. Fully on-device, BSL 1.1, Pro/Team tiers ready. Built for compliance-first workflows.

+
+ No cloud egress + On-device encryption + BSL 1.1 licensed + Pro & Team tiers +
+
+
+
+ + +
+
+ +

The current model doesn't scale.

+

Every AI app that stores personal context becomes a data liability. One breach, one policy change, one acquisition — and your users' data is somewhere it shouldn't be.

+

Trulana eliminates this by never collecting the data in the first place. The context lives on the user's machine. Your app queries it. The redaction engine enforces the boundary. You get personalization without the storage, the GDPR headache, or the trust problem.

+

Users should be able to build a real relationship with AI over time — without handing that relationship to a cloud provider.

+
+
+ + +
+
+ +

Working macOS MVP. Build it and run it today.

+
+ $ git clone https://github.com/AdamsLocal/trulana && cd trulana && flutter run -d macos + COPY +
+
+
Apple signed & notarized macOS app
+
macOS app with encrypted local database
+
REST API on localhost:8432
+
MCP integration (works in Cursor today)
+
Token-based auth with 15-minute TTL
+
3-stage auto-redaction pipeline
+
Structured preferences for compounding local context
+
Encrypted audit log for every query
+
134 tests passing, 38 REST + 18 MCP checks
+
Scope enforcement (in progress)
+
On-device LLM for NER (next phase)
+
+
+
+ + +
+
+

Try the architecture. Then decide if you want to build on it.

+

I'm looking for a few macOS design partners building AI workflows that need persistent local context, structured preferences, and redacted outputs.

+
    +
  • integrate local-first context into their product
  • +
  • avoid storing sensitive user data
  • +
  • move faster without compliance overhead
  • +
+ +
+
+ + + + + + + + + - \ No newline at end of file + diff --git a/lib/features/dashboard/dashboard_view.dart b/lib/features/dashboard/dashboard_view.dart index ca6ac11..527827d 100644 --- a/lib/features/dashboard/dashboard_view.dart +++ b/lib/features/dashboard/dashboard_view.dart @@ -1,4 +1,4 @@ -import 'dart:math'; +import 'dart:math' show max; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -191,7 +191,7 @@ class _ContentHeader extends StatelessWidget { fontWeight: FontWeight.w600, color: TrulanaColors.textPrimary)), const Spacer(), - if (trailing != null) trailing!, + ?trailing, ], ), ); diff --git a/lib/features/shell/views/context_vault_view.dart b/lib/features/shell/views/context_vault_view.dart index bc2ba87..54d24f8 100644 --- a/lib/features/shell/views/context_vault_view.dart +++ b/lib/features/shell/views/context_vault_view.dart @@ -4,7 +4,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:trulana/core/theme/theme.dart'; import 'package:trulana/features/engine/auto_redact_engine.dart'; import 'package:trulana/features/engine/context_vault.dart'; -import 'package:trulana/features/engine/models/redaction_result.dart'; import 'package:trulana/models/models.dart'; import 'package:trulana/providers/providers.dart';