feat: brain service — self-contained second brain knowledge manager

Full backend service with:
- FastAPI REST API with CRUD, search, reprocess endpoints
- PostgreSQL + pgvector for items and semantic search
- Redis + RQ for background job processing
- Meilisearch for fast keyword/filter search
- Browserless/Chrome for JS rendering and screenshots
- OpenAI structured output for AI classification
- Local file storage with S3-ready abstraction
- Gateway auth via X-Gateway-User-Id header
- Own docker-compose stack (6 containers)

Classification: fixed folders (Home/Family/Work/Travel/Knowledge/Faith/Projects)
and fixed tags (28 predefined). AI assigns exactly 1 folder, 2-3 tags, title,
summary, and confidence score per item.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Yusuf Suleman
2026-04-01 11:48:29 -05:00
parent 51a8157fd4
commit 8275f3a71b
73 changed files with 24081 additions and 4209 deletions

View File

@@ -1,10 +1,13 @@
<script lang="ts">
import { onMount } from 'svelte';
import { page } from '$app/state';
import AtelierTripDetailPage from '$lib/pages/trips/AtelierTripDetailPage.svelte';
import ItemModal from '$lib/components/trips/ItemModal.svelte';
import TripEditModal from '$lib/components/trips/TripEditModal.svelte';
import ImageUpload from '$lib/components/trips/ImageUpload.svelte';
let { data } = $props();
// ── Types ──
interface ItineraryEvent {
time: string; name: string; description: string;
@@ -387,6 +390,9 @@
});
</script>
{#if data?.useAtelierShell}
<AtelierTripDetailPage />
{:else}
<div class="page trip-detail-page">
<div class="app-surface">
<!-- Back (hidden in share mode) -->
@@ -1039,3 +1045,4 @@
.day-story { margin: 6px 0 4px; padding: 10px 14px; }
}
</style>
{/if}