A modern web dashboard for managing your AI knowledge base powered by Forgetful.
Browse memories, entities, projects, and visualize connections in an interactive knowledge graph.
- Memories - Create, edit, search and organize atomic knowledge units
- Entities - Track people, organizations, teams and their relationships
- Knowledge Graph - Interactive visualization of connections between memories and entities
- Projects - Organize knowledge by context
- Global Project Filter - Focus on specific project across all views
New to Forgetful? Check out the User Guide for a complete walkthrough of all features.
Add to your existing docker-compose.yml:
forgetful-ui:
image: ghcr.io/riffi/forgetful-ui:latest
container_name: forgetful-ui
restart: unless-stopped
ports:
- "127.0.0.1:3000:80"
networks:
- forgetful
depends_on:
forgetful-service:
condition: service_healthyThen run:
docker compose up -d --pull alwaysOpen http://localhost:3000 in your browser.
The frontend proxies all API requests to
forgetful-service:8020automatically.
To run both frontend and backend together:
cd docker
cp .env.example .env
docker compose up -dThis starts:
- Frontend at http://localhost:3000
- Backend at http://localhost:8020
Edit .env to customize ports and settings.
npm install
npm run devOpen http://localhost:5173 in your browser.
npm run build
npm run previewCreate .env.local to override API URL:
VITE_API_URL=http://localhost:8020/api/v1For production deployment with Traefik and GitHub OAuth, see the Deployment Guide.
Key architecture:
Internet → Traefik (HTTPS) → forgetful-ui (nginx) → forgetful-service (API)
The UI container proxies all API and OAuth requests to the backend, making it easy to deploy behind a reverse proxy with SSL.
Build the image locally:
docker build -f docker/Dockerfile -t forgetful-ui .
docker run -p 3000:80 forgetful-uiThe frontend automatically detects the backend authentication mode:
| Backend Response | Detected Mode | Frontend Behavior |
|---|---|---|
API returns 200 OK |
disabled |
Direct access, no login required |
API returns 401 + OAuth metadata exists |
oauth |
Shows "Login with GitHub" button |
API returns 401 + no OAuth metadata |
jwt |
Shows JWT login form |
Detection flow:
- Frontend makes test request to
/api/v1/memories?limit=1 - If
401 Unauthorized, checks/.well-known/oauth-authorization-server - If OAuth metadata found → OAuth mode (PKCE flow with GitHub)
- Otherwise → JWT mode or auth disabled
This allows the same frontend to work with different backend configurations without any changes.
