feat: indie status page MVP -- FastAPI + SQLite

- 8 DB models (services, incidents, monitors, subscribers, etc.)
- Full CRUD API for services, incidents, monitors
- Public status page with live data
- Incident detail page with timeline
- API key authentication
- Uptime monitoring scheduler
- 13 tests passing
- TECHNICAL_DESIGN.md with full spec
This commit is contained in:
IndieStatusBot 2026-04-25 05:00:00 +00:00
commit 902133edd3
4655 changed files with 1342691 additions and 0 deletions

View file

@ -0,0 +1,43 @@
from __future__ import annotations
from typing import Any
from typing import List
from typing import Tuple
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from alembic.autogenerate import RevisionContext
class CommandError(Exception):
"""Base command error for all exceptions"""
class DatabaseNotAtHead(CommandError):
"""Indicates the database is not at current head revisions.
Raised by the :func:`.command.current` command when the
:paramref:`.command.current.check_heads` parameter is used.
.. versionadded:: 1.17.1
"""
class AutogenerateDiffsDetected(CommandError):
"""Raised when diffs were detected by the :func:`.command.check`
command.
.. versionadded:: 1.9.0
"""
def __init__(
self,
message: str,
revision_context: RevisionContext,
diffs: List[Tuple[Any, ...]],
) -> None:
super().__init__(message)
self.revision_context = revision_context
self.diffs = diffs