Ein Push aktualisiert den Stand sofort, statt bis zum naechsten Durchlauf des Zeitgebers zu warten; ein geschlossenes Issue hakt seine Aufgabe ab. Der Zeitplan bleibt als Rueckfalllosung. Der Endpunkt ist der einzige ohne Anmeldung, der schreibt – entsprechend eng gefasst: - Ausgewiesen wird sich mit einer Signatur ueber den Rumpf. GitHub und Gitea rechnen HMAC-SHA256, GitLab schickt nur den Token im Klartext; dessen Verfahren ist schwaecher, mehr gibt die Plattform nicht her. Verglichen wird durchweg zeitkonstant. - Geprueft wird gegen den **rohen** Rumpf. Durch JSON.parse und JSON.stringify gedreht kaeme eine andere Zeichenfolge heraus und die Signatur passte nie. - Der Rumpf ist nie Quelle fuer Inhalte. Wer das Geheimnis kennt, kann eine Aufgabe auf- oder zumachen und einen Abgleich ausloesen – keine beliebigen Daten einschleusen. - Ratenbegrenzung je Repository, Deckel auf die Rumpfgroesse, und ein unbekanntes Repository antwortet wie ein nicht eingerichtetes: 404, damit die ID nicht bestaetigt wird. - Unbekannte Ereignisse werden angenommen und liegen gelassen. Ein Fehler brachte das Git-System zum Wiederholen und irgendwann zum Abschalten. Das Geheimnis liegt verschluesselt am Repository, wie die Zugangstoken, und ist genau einmal zu sehen. Damit es nicht doch nach draussen wandert, laedt repositoryInclude die Repositories nicht mehr per include, sondern ueber eine ausdrueckliche Feldliste: ein include haette das neue Feld still in jede Projektantwort und jede Seite mitgenommen. Ob ein Haken eingerichtet ist, holt die Projektseite getrennt. Die Migration legt zwei nullbare Spalten an, mehr nicht; der Gegenlauf von migrate diff kommt leer heraus. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
6.4 KiB
Roadmap
Sammlung dessen, was als Nächstes kommen könnte — zum Durchsprechen und Stück für Stück abarbeiten. Reihenfolge ist ein Vorschlag, keine Festlegung.
Aufwand: S = überschaubar · M = halber Tag · L = größerer Brocken
Was bereits steht, listet FEATURES.md.
1 · Als Nächstes empfohlen
1.0 Rest aus v1.6.0: persönliche API-Token M
Schnellerfassung und die projektübergreifende Aufgabenseite sind mit v1.6.0 ausgeliefert. Offen bleibt der dritte Teil — siehe 1.3. Er gehört sachlich dazu: erfassen am Telefon, überblicken an einer Stelle, ansprechen per Shortcut.
Bewusst nicht mitgeliefert wurde ein Index für die übergreifende
Aufgabenabfrage. Task hat kein ownerId, die Trennung läuft über
project: { ownerId }, und [projectId, status, position] greift dafür
nicht. Bei einigen hundert Aufgaben fällt das nicht auf; wird die Seite
träge, ist ein Index auf dueDate der erste Griff — und dann eine
Migration wert.
1.2 Läuft es noch? M
Eine Health-Check-URL je Projekt, die der Zeitgeber regelmäßig anpingt. Nebula wüsste dann, ob ein Projekt nicht nur existiert, sondern auch läuft. Nutzt Zeitgeber und Benachrichtigungen, die es schon gibt. Der SSRF-Schutz greift dabei wie bei den Git-Aufrufen.
1.3 Persönliche API-Token M
Derzeit geht die API nur mit Sitzungscookie. Ein Token je Konto würde
curl-Aufrufe und Handy-Shortcuts erlauben — Idee aus dem Terminal anlegen,
ohne den Browser zu öffnen. Nur der Hash in der Datenbank, wie bei den
Sitzungen.
1.4 Aufgaben ↔ Issues: was noch fehlt S
Mit v1.7.0 stehen beide Richtungen: „als Issue anlegen“ und der Rückweg über Webhooks. Offen geblieben ist Kleinkram:
- Mehrere Repositories. Der Knopf nimmt immer das führende. Bei einem Projekt aus Frontend und Backend fehlt die Wahl.
- Beim Übernehmen aus Issues wird der Rückweg nicht automatisch eingerichtet — der Webhook ist getrennt zu setzen.
Was nicht kommt, bleibt wie besprochen: eine echte beidseitige
Synchronisation mit Konfliktauflösung. Die Zustände passen ohnehin nicht
aufeinander — ein Issue kennt nur offen und geschlossen, DOING und
BLOCKED gehen im Rundlauf verloren. Das ist hingenommen, statt den
Issue-Tracker mit Labels zu füllen, die dort niemand pflegt.
2 · Größere Brocken
2.1 Passwort-Zurücksetzen per E-Mail M
Heute setzt ein Administrator das Passwort neu. Selbstbedienung braucht SMTP und damit eine weitere Konfiguration — lohnt erst im Mehrbenutzerbetrieb.
2.2 Mehrsprachigkeit L
Die Oberfläche ist durchgängig deutsch verdrahtet. Englisch dazu wäre eine Voraussetzung, falls du das Projekt veröffentlichen willst.
3 · Kleinigkeiten
| Idee | Aufwand | Nutzen |
|---|---|---|
| Wochenrückblick | S |
„Was ist diese Woche passiert" über alle Projekte, aus dem Aktivitätsverlauf |
| Globale Zeitleiste | S |
Derselbe Verlauf, aber projektübergreifend als eigene Seite |
| Suche über Aufgaben | S |
Die Volltextsuche deckt bisher nur Notizen ab |
| Suchtreffer in Notizen hervorheben | S |
In der Notiz selbst, nicht nur in der Trefferliste |
| Aufgabe ↔ Commit verknüpfen | M |
Enthält ein Commit #5, wird die übernommene Aufgabe verlinkt — fällt weitgehend mit 1.4 ab |
Tastaturkürzel-Übersicht mit ? |
S |
Es gibt inzwischen genug davon |
| Hell/Dunkel umschaltbar | M |
Aktuell nur dunkel |
| Eigenes Logo und Farbe | S |
Ergänzt APP_NAME |
| Audit-Log für Adminaktionen | M |
Nachvollziehbar, wer Konten geändert hat |
4 · Bewusst nicht
Damit klar ist, was nicht kommt und warum:
- Geteilte Projekte zwischen Konten. Die Trennung ist derzeit hart und einfach zu prüfen. Freigaben bringen eine Rechteverwaltung mit sich — nur sinnvoll, wenn wirklich mehrere Leute zusammenarbeiten.
- Veraltete Abhängigkeiten prüfen. Klingt verlockend, aber Renovate und Dependabot machen das besser, und es wären viele Aufrufe an fremde Registries — für eine Zahl, die im Repo selbst schon steht.
- Anhänge an Notizen. Bräuchte Dateispeicher und damit eine zweite Sorge bei jeder Sicherung. Ein Link ins Git tut es auch.
- Eigene Git-Operationen (klonen, committen, pushen). Nebula ist eine Übersicht, keine Entwicklungsumgebung.
- Zeiterfassung, Rechnungen, Kundenverwaltung. Andere Baustelle.
- Cloud-Synchronisation. Die Daten bleiben in deiner Datenbank; das ist der Punkt.
Erledigt
| Dashboard mit Status, Notizen, Git-Anbindung | ✓ |
| GitHub, GitLab und Gitea | ✓ |
| Benutzerverwaltung, Passwort und Passkeys | ✓ |
| Einzel- und Mehrbenutzerbetrieb | ✓ |
| Härtung: CSRF, CSP, SSRF, Ratenbegrenzung, Datentrennung | ✓ |
| Docker- und Standalone-Betrieb | ✓ |
| Automatischer Abgleich mit Zeitplan | ✓ |
| Export, Import und Sicherung | ✓ |
| v0.3.0 Markdown, Volltextsuche über Notizen, PR- und Issue-Listen, Testfundament | ✓ |
| v0.4.0 Kanban mit Drag & Drop, CI-Status je Branch, Commit-Aktivität | ✓ |
| v0.5.0 Aufgabenbrett je Projekt mit sortierbaren Spalten, Fortschritt aus Aufgaben | ✓ |
| v0.6.0 Ende-zu-Ende-Tests mit Playwright, CI-Pipeline für Gitea Actions | ✓ |
| v0.7.0 Benachrichtigungen über ntfy, Webhook und E-Mail | ✓ |
| v0.8.0 Stillstehende Projekte melden, Schwelle im Adminbereich | ✓ |
v0.9.0 Schnellsuche per Strg+K, Aufgaben aus Git-Issues |
✓ |
| v1.0.0 Aktivitätsverlauf je Projekt, Zwei-Faktor per TOTP, mehrere Repositories je Projekt | ✓ |
| v1.1.0 Freie Reihenfolge im Brett, Mehrfachauswahl, installierbar als App, Änderungsverlauf | ✓ |
| v1.2.0 Commit-Heatmap über ein Jahr, Projektvorlagen | ✓ |
| v1.3.0 Wiederkehrende Aufgaben, Barrierefreiheit nach WCAG 2.1 AA | ✓ |
| v1.4.0 README-Vorschau auf der Projektseite | ✓ |
| v1.5.0 Sicherheitsdurchsicht, Server-Anleitung und Update-Skript | ✓ |
| v1.6.0 Mobile Ansicht, Listenansicht, Schnellerfassung, Aufgaben über alle Projekte | ✓ |
| v1.7.0 Aufgabe als Git-Issue anlegen, Webhooks für Push und Issues | ✓ |
Zur Entscheidung beim Export: Git-Tokens gehen nicht mit. Die Verbindung wird nur beschrieben, das Token ist nach dem Import neu zu hinterlegen. Snapshots bleiben ebenfalls draußen — sie sind reproduzierbar. Der Projekt-Export steht jedem Konto für seine eigenen Daten offen, die Voll-Sicherung nur Administratoren.