尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Euer privates digitales Erinnerungsbuch — eine Web-App für Paare, um gemeinsame Erinnerungen, Fotos und Meilensteine festzuhalten, visualisiert als wachsender interaktiver Baum. Die App ist nach Paaren getrennt: jedes Paar hat seine eigenen Erinnerungen, Fotos und Einstellungen und sieht nichts von den anderen. Eine offene Registrierung gibt es bewusst nicht — neue Konten entstehen nur über einen Einladungscode, den der Betreiber mit python scripts/create_invite.py erzeugt. Screenshots Dashboard查看完整 README ↗
Euer privates digitales Erinnerungsbuch — eine Web-App für Paare, um gemeinsame Erinnerungen, Fotos und Meilensteine festzuhalten, visualisiert als wachsender interaktiver Baum.
Die App ist nach Paaren getrennt: jedes Paar hat seine eigenen Erinnerungen, Fotos und Einstellungen und sieht nichts von den anderen. Eine offene Registrierung gibt es bewusst nicht — neue Konten entstehen nur über einen Einladungscode, den der Betreiber mit
python scripts/create_invite.pyerzeugt.
git clone https://github.com/User420-bit/MemoryTree.git
cd MemoryTree
# 1. Einmalig: Skript ausführbar machen
chmod +x start.sh stop.sh
# 2. App starten (erledigt beim ersten Mal alles automatisch)
./start.sh
Das Skript richtet beim ersten Start alles automatisch ein:
.venv).env-KonfigurationAuf macOS öffnet sich http://localhost:8000 automatisch im Browser. Auf Linux/Windows den Link manuell aufrufen.
Ab dem zweiten Start reicht: ./start.sh
Unter Windows läuft Memory Tree am einfachsten in einem Docker-Container — keine Python-Installation, kein venv, keine Pfad-Probleme.
# 1. Konfiguration anlegen (einmalig)
copy .env.example .env
# 2. SECRET_KEY in .env eintragen — sicheren Wert generieren mit:
docker run --rm python:3.11-slim python -c "import secrets; print(secrets.token_urlsafe(64))"
# 3. App bauen und starten
docker compose -f docker-compose.yml up --build
Anschließend http://localhost:8000 im Browser öffnen.
# In einem zweiten Terminal, während die App läuft:
docker compose -f docker-compose.yml exec app python scripts/create_users.py
# Im laufenden Terminal: Ctrl+C
# Oder aus einem anderen Terminal:
docker compose -f docker-compose.yml down
Die SQLite-Datenbank und alle hochgeladenen Bilder bleiben im Ordner
./data/ auf dem Host erhalten und überstehen jeden Container-Rebuild.
Hinweis: Die Datei
compose.yamlist die Production-Variante für den Raspberry Pi (mit Caddy als Reverse-Proxy). Für lokale Entwicklung unter Windows/macOS/Linux immerdocker-compose.ymlmit dem-f-Flag verwenden.
# Option A: Im Terminal, wo der Server läuft
CTRL+C
# Option B: Aus einem anderen Terminal
./stop.sh
Nach dem Start http://localhost:8000 im Browser öffnen.
| Benutzername | Passwort |
|---|---|
partner_a | test1234 |
partner_b | test1234 |
⚠️ Diese Zugangsdaten gelten nur wenn
DEBUG=truein der.envgesetzt ist (Standard nach Erstinstallation).
In Production (DEBUG=false) werden diese Accounts nicht automatisch angelegt — eigene Accounts überpython scripts/create_users.pyanlegen.
DenSECRET_KEYin der.env-Datei vor dem produktiven Einsatz ändern.
python scripts/create_invite.py --name "Anna & Ben" # Paar + Code anlegen
python scripts/create_invite.py --list # offene Codes anzeigen
Das Skript druckt einen Registrierungslink (/auth/register?code=…). Der Code
ist zweimal einlösbar — der erste Einlöser wird Partner A, der zweite Partner B —
und standardmäßig 30 Tage gültig.
Für einen frischen Klon lassen sich fiktive, anonyme Demo-Erinnerungen und -Meilensteine einspielen, um die App direkt vollständig auszuprobieren:
python scripts/seed_demo_data.py
⚠️ Das Skript löscht alle bestehenden Erinnerungen, Meilensteine und Fotos und ersetzt sie durch Demo-Daten. Nur in Entwicklungsumgebungen ausführen.
⇧⌘B (Shift+Cmd+B) → startet die App direkt aus VS Code.
Oder: Terminal → Aufgabe ausführen → ▶ Memory Tree starten
F5 → startet die App im Debug-Modus mit Breakpoint-Unterstützung.
memory-tree/
├── main.py # FastAPI Einstiegspunkt
├── models.py # SQLAlchemy Datenmodelle
├── database.py # DB-Verbindung & Session
├── auth.py # JWT-Authentifizierung
├── config.py # App-Konfiguration
├── schemas.py # Pydantic Request/Response Schemas
├── routers/
│ ├── auth.py # Login/Logout
│ ├── memories.py # CRUD Erinnerungen
│ ├── photos.py # Foto-Upload
│ └── milestones.py # Meilensteine
├── templates/ # Jinja2 HTML-Templates
├── static/ # CSS, JS, Bilder, Uploads
├── start.sh # App starten
├── stop.sh # App stoppen
└── requirements.txt # Python-Abhängigkeiten
| Komponente | Technologie |
|---|---|
| Backend | FastAPI (Python 3.11+) |
| Datenbank | SQLite + SQLAlchemy 2.0 |
| Templates | Jinja2 + Tailwind CSS |
| Auth | JWT (python-jose) + bcrypt |
| Visualisierung | D3.js (Baum), Leaflet.js (Karte) |
Die App wird über die .env-Datei konfiguriert:
| Variable | Beschreibung | Standard |
|---|---|---|
SECRET_KEY | JWT-Signaturschlüssel — zwingend ändern | dein-geheimer-schluessel-hier-aendern |
DATABASE_URL | SQLite-Datenbankpfad | sqlite:///./data/memory_tree.db |
ACCESS_TOKEN_EXPIRE_MINUTES | Session-Dauer in Minuten | 480 |
UPLOAD_DIR | Verzeichnis für Foto-Uploads | data/uploads |
MAX_IMAGE_SIZE | Max. Bildbreite/-höhe in Pixeln | 1920 |
Vollständige Vorlage mit allen Pflichtfeldern und Erklärungen: .env.example.
Zwingend anzupassen ist mindestens SECRET_KEY — ohne einen sicheren,
mindestens 32 Zeichen langen Wert startet die App im Production-Modus nicht.
Dieses Projekt steht unter der MIT-Lizenz.