Skip to main content

Overview

Argument Cartographer uses Firebase Firestore as its primary database, chosen for rapid development, built-in security, real-time capabilities, and managed scaling. The data model follows a strict user-ownership pattern for privacy and security.
Security Model: All user data is isolated under /users/{userId} paths with declarative Firestore Security Rules preventing cross-user access.

Data Architecture

Collection Structure

Root Collections

Purpose: User profile documentsPath: /users/{userId}Schema:
Access Control:
  • Read: Owner only
  • Write: Owner only
  • List: Disabled (prevents user enumeration)
Example:

Subcollections

Purpose: User’s saved argument analysesPath: /users/{userId}/argumentMaps/{mapId}Schema:
Indexes:
  • (userId, createdAt DESC) - For history queries
Access Control:
  • Read: Owner only
  • Write: Owner only
  • List: Owner can list their own

Nested Data Structures

ArgumentNode

Storage: Embedded array within argumentMaps.blueprint Why not separate collection?
  • Tight coupling with analysis
  • Always fetched together
  • Simpler queries
  • Atomic updates

DetectedFallacy

Storage: Embedded array within argumentMaps.fallacies

Tweet

Storage: Embedded array within argumentMaps.tweets

Firestore Security Rules

Declarative access control enforced at the database level.

Core Rules File

Security Principles

1

Default Deny

All operations denied unless explicitly allowed
2

Path-Based Authorization

Ownership determined by {userId} in path - fast, secure
3

No Public Data

User data never readable by other users
4

Immutable IDs

User IDs and document IDs cannot be changed after creation
5

No Cross-User Queries

Impossible to query other users’ data even with malicious client
Never bypass security rules from server-side code! Even with Firebase Admin SDK, respect the security model for consistency.

Query Patterns

User’s Analysis History

Index Required: (userId, createdAt DESC)

Radar Topic Feed

Composite Index: (archived, categories, updatedAt DESC)

Real-Time Listeners (Future)

Data Lifecycle

Creation Flow

1

User Submits Analysis

Client sends request via Server Action
2

Server Processes

Genkit flow generates complete analysis
3

Firestore Write

Server Action saves to /users/{userId}/argumentMaps/{autoId}
4

Return to Client

Document ID and data returned to client for display

Update Flow (Future)

Re-analyze existing topic with fresh data:

Deletion Policy

Users can delete their analyses:
Cascade: Sources are NOT deleted (may be reused)

Performance Optimization

Indexing Strategy

Required Composite Indexes:
  1. User Analysis History
    • Collection: argumentMaps (collection group)
    • Fields: userId ASC, createdAt DESC
    • Query: User history sorted by recency
  2. Radar Feed Filtering
    • Collection: radarTopics
    • Fields: archived ASC, categories ASC, updatedAt DESC
    • Query: Active topics by category
  3. Featured Topics
    • Collection: radarTopics
    • Fields: featured ASC, credibilityScore DESC
    • Query: Top featured topics
Firestore will prompt you to create indexes when queries fail. Click the link in the error to auto-generate.

Denormalization

Pattern: Duplicate userId in subcollection documents Benefit: Enables collection group queries without joins

Batch Operations

Update multiple documents atomically:
Limits: 500 operations per batch

Cost Optimization

Read Costs

Firestore Pricing (as of 2024):
  • Reads: $0.06 per 100K
  • Writes: $0.18 per 100K
  • Deletes: $0.02 per 100K
Optimization Strategies:
  1. Pagination: Limit queries to 20-50 results
  2. Client Caching: Cache data in React state/localStorage
  3. Selective Fetching: Only fetch what’s displayed
  4. Real-Time Sparingly: Use snapshots only when necessary

Write Costs

Expensive operations:
  • Creating analyses (inevitable)
  • Updating Radar topics (batched)
  • Logging (minimize production logs)
Tip: Batch related writes together

Next Steps

External Integrations

How external APIs interact with the data layer

AI Orchestration

How AI generates the data stored in Firestore

Installation

Set up Firebase for your own instance

Configuration

Configure Firestore and security rules