From 6d5aeec0e716e296abfbd086998e75cee83f68a2 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Apr 2026 01:11:01 +0000 Subject: [PATCH 1/6] restore landing page to March 31 state and add government/compliance section Reverted the stub landing.html back to the full March 31 version (1169 lines), then added a new "Government & regulated industries" section (section 8) between "Who it's for" and "Why it matters" with the compliance-first positioning copy. https://claude.ai/code/session_01XpWRnEu9wHuNCjqMupwEJV --- docs/landing.html | 1208 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1201 insertions(+), 7 deletions(-) diff --git a/docs/landing.html b/docs/landing.html index fb28d2b..c89f6e4 100644 --- a/docs/landing.html +++ b/docs/landing.html @@ -1,13 +1,1207 @@ - + + + + + +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
  • +
+ +
+
+ +
+
+ © 2026 AdamsLocal. Trulana is a trademark of AdamsLocal. All rights reserved. · Security · Source · Contact +
+
+ + + + + + + - \ No newline at end of file + From 8e5976480a98e0b93d3f32732ee95452565f295a Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Apr 2026 01:16:19 +0000 Subject: [PATCH 2/6] fix: resolve flutter analyze --fatal-infos failures - dashboard_view.dart:194: use null-aware element syntax per use_null_aware_elements lint - context_vault_view.dart:7: remove unused redaction_result.dart import https://claude.ai/code/session_01XpWRnEu9wHuNCjqMupwEJV --- lib/features/dashboard/dashboard_view.dart | 2 +- lib/features/shell/views/context_vault_view.dart | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/features/dashboard/dashboard_view.dart b/lib/features/dashboard/dashboard_view.dart index ca6ac11..101e40c 100644 --- a/lib/features/dashboard/dashboard_view.dart +++ b/lib/features/dashboard/dashboard_view.dart @@ -191,7 +191,7 @@ class _ContentHeader extends StatelessWidget { fontWeight: FontWeight.w600, color: TrulanaColors.textPrimary)), const Spacer(), - if (trailing != null) trailing!, + if (trailing case final t?) t, ], ), ); 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'; From 5ac8e238aaacc16e5c5ef122027c296344bc2363 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Apr 2026 02:27:54 +0000 Subject: [PATCH 3/6] feat: display Trulana icon at full hero size with squircle glow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Scale hero logo from 80px → 260px (160px mobile), apply 22% border-radius for the Apple squircle look, and add layered cyan/blue box-shadow to match the neon glow in the app icon. https://claude.ai/code/session_01XpWRnEu9wHuNCjqMupwEJV --- docs/landing.html | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/landing.html b/docs/landing.html index c89f6e4..b4fb442 100644 --- a/docs/landing.html +++ b/docs/landing.html @@ -226,10 +226,15 @@ .hero-logo { display: block; - width: 80px; - height: 80px; - border-radius: 18px; - margin: 0 auto 16px; + width: 260px; + height: 260px; + border-radius: 22%; + margin: 0 auto 28px; + box-shadow: + 0 0 0 1px rgba(92, 224, 216, 0.15), + 0 0 40px rgba(92, 224, 216, 0.25), + 0 0 90px rgba(30, 60, 200, 0.2), + 0 24px 64px rgba(0, 0, 0, 0.6); } .hero-wordmark { @@ -716,7 +721,7 @@ /* Hero */ .hero { padding: 80px 0 48px; } - .hero-logo { width: 64px; height: 64px; border-radius: 14px; margin-bottom: 14px; } + .hero-logo { width: 160px; height: 160px; border-radius: 22%; margin-bottom: 20px; } .hero-wordmark { font-size: 18px; letter-spacing: 0.05em; margin-bottom: 10px; } .hero-headline { font-size: 28px; line-height: 1.2; margin-bottom: 12px; } .hero .sub { font-size: 15px; max-width: 100%; } From 4ef54d2ec060952f512c31c84849dee24f417f28 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Apr 2026 02:45:45 +0000 Subject: [PATCH 4/6] fix: remove unused dart:math import from dashboard_view.dart Removes the unused `import 'dart:math'` that was causing flutter analyze --fatal-infos to fail with an unused_import info. https://claude.ai/code/session_01XpWRnEu9wHuNCjqMupwEJV --- lib/features/dashboard/dashboard_view.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/features/dashboard/dashboard_view.dart b/lib/features/dashboard/dashboard_view.dart index 101e40c..47240e5 100644 --- a/lib/features/dashboard/dashboard_view.dart +++ b/lib/features/dashboard/dashboard_view.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; From 211b5d577aa166cecfb655fcbb34ff57b0a44b79 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Apr 2026 02:52:18 +0000 Subject: [PATCH 5/6] fix: use null-aware element syntax ?trailing in collection literal Replace `if (trailing case final t?) t,` with the canonical Dart 3.8 null-aware element `?trailing,` as required by use_null_aware_elements lint. https://claude.ai/code/session_01XpWRnEu9wHuNCjqMupwEJV --- lib/features/dashboard/dashboard_view.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/features/dashboard/dashboard_view.dart b/lib/features/dashboard/dashboard_view.dart index 47240e5..e1b0874 100644 --- a/lib/features/dashboard/dashboard_view.dart +++ b/lib/features/dashboard/dashboard_view.dart @@ -189,7 +189,7 @@ class _ContentHeader extends StatelessWidget { fontWeight: FontWeight.w600, color: TrulanaColors.textPrimary)), const Spacer(), - if (trailing case final t?) t, + ?trailing, ], ), ); From b4f29acd44b2a7db0c1d661baee2e3f218e8ec5b Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Apr 2026 03:07:37 +0000 Subject: [PATCH 6/6] fix: restore dart:math import using show max to resolve compilation error Removing the full dart:math import broke the max() call at line 388 used in _RedactionStatsCard. Using `show max` satisfies both the unused_import lint (only the needed symbol is imported) and the reference to max() in the .reduce() call. https://claude.ai/code/session_01XpWRnEu9wHuNCjqMupwEJV --- lib/features/dashboard/dashboard_view.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/features/dashboard/dashboard_view.dart b/lib/features/dashboard/dashboard_view.dart index e1b0874..527827d 100644 --- a/lib/features/dashboard/dashboard_view.dart +++ b/lib/features/dashboard/dashboard_view.dart @@ -1,3 +1,5 @@ +import 'dart:math' show max; + import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';