Watchtower-Course-Project

Architectural Decision Records (ADRs)

This directory contains Architectural Decision Records – documents that capture important technical decisions made during WatchTower’s development.

Purpose

ADRs help us:

What is an ADR?

An ADR is a concise document that records:

ADR Format

# ADR NNNN: [Title describing the decision]

## Status
Proposed | Accepted | Superseded | Deprecated

## Context
Describe the issue or problem we're facing and why a decision is needed.

## Decision
State the decision clearly and concisely.

## Consequences
What are the positive outcomes and tradeoffs of this decision?

## Alternatives Considered
What other options did we evaluate and why were they not chosen?

Current ADRs

ADR-0001: Initial WatchTower Architecture

ADR-0002: Use Node.js for WatchTower Backend

ADR-0003: Use SQLite for WatchTower Event Storage

ADR-0004: Use Navigation Timing API for Frontend Performance Telemetry

ADR-0005: Use Beacon API for Reliable Telemetry Delivery

ADR-0006: Use Clerk for WatchTower Authentication

ADR-0007: Migrate WatchTower Event Storage from SQLite to PostgreSQL

ADR-0008: Use Supabase for Managed PostgreSQL Hosting

ADR-0009: Use Render for WatchTower Application Hosting

Writing ADRs

When to Write an ADR

Write an ADR when making a decision that:

Don’t write ADRs for: Minor implementation details, temporary workarounds, or decisions that are obvious given the context.

Process

  1. Identify the decision – What are we deciding?
  2. Gather context – What problem are we solving?
  3. List options – What alternatives exist?
  4. Evaluate tradeoffs – Why is one better than others?
  5. Write the ADR – Capture in standard format
  6. Get feedback – Share with the team for discussion
  7. Accept or revise – Finalize and update status
  8. Save in this folder – File with descriptive name (e.g., ADR-0002-database-choice.md)

Naming Convention

Use one of these formats:

Maintaining ADRs

Updating Status

When circumstances change, update the ADR status:

Superseding an ADR

If a decision changes, don’t delete the old ADR. Instead:

  1. Create a new ADR explaining the new decision
  2. Update the old ADR status to “Superseded”
  3. Link the old and new ADRs together

Example in new ADR:

## Supersedes
ADR-0002: Use JavaScript (now using TypeScript instead)

ADR 0001: Initial WatchTower Architecture

This ADR is embedded below for reference. Consider moving to a separate file (ADR-0001.md) for clarity.

Status

Accepted

Context

WatchTower is a lightweight observability system for tracking frontend errors, performance signals, user feedback, and deployment/build-related signals.

For Sprint 1, we need a simple architecture that allows us to prototype quickly while staying within course constraints.

Decision

We will begin with a lightweight static web application prototype using HTML, CSS, and vanilla JavaScript. We will use mock JSON data and browser APIs to simulate event collection. The prototype will include:

Consequences

This approach keeps the project simple, easy to deploy, and easier for all team members to understand. It also allows us to demonstrate the core WatchTower concept before adding complexity.

Alternatives Considered

These may be considered later only if approved and justified.