From e02ebf897a38c5dd3eccb5e7bba7b5a1d71f9d33 Mon Sep 17 00:00:00 2001 From: Prabhat Ranjan Date: Mon, 27 Apr 2026 08:31:49 +1000 Subject: [PATCH] chore: move docs to .doc for local-only tracking --- docs/CODE_OF_CONDUCT.md | 73 ----------- docs/README.md | 89 ------------- docs/SECURITY.md | 100 -------------- docs/adr/TEMPLATE.md | 117 ----------------- docs/architecture/diagrams/classes.mmd | 124 ------------------ docs/architecture/diagrams/container.mmd | 83 ------------ docs/architecture/diagrams/data-flow.mmd | 117 ----------------- docs/architecture/diagrams/system-context.mmd | 52 -------- docs/scanner-preview.png | Bin 81097 -> 0 bytes 9 files changed, 755 deletions(-) delete mode 100644 docs/CODE_OF_CONDUCT.md delete mode 100644 docs/README.md delete mode 100644 docs/SECURITY.md delete mode 100644 docs/adr/TEMPLATE.md delete mode 100644 docs/architecture/diagrams/classes.mmd delete mode 100644 docs/architecture/diagrams/container.mmd delete mode 100644 docs/architecture/diagrams/data-flow.mmd delete mode 100644 docs/architecture/diagrams/system-context.mmd delete mode 100644 docs/scanner-preview.png diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md deleted file mode 100644 index 6787aed..0000000 --- a/docs/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,73 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our community include: - -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience -* Focusing on what is best not just for us as individuals, but for the overall community - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or advances of any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email address, without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT EMAIL]. All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction -**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. - -### 2. Warning -**Community Impact**: A violation through a single incident or series of actions. - -**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. - -### 3. Temporary Ban -**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban -**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within the community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. - -Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). - -For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations. \ No newline at end of file diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 805855f..0000000 --- a/docs/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# Qullamaggie Scanner - Documentation - -**Version**: 1.0 | **Last Updated**: 2026-04-27 - -Welcome to the Qullamaggie Scanner documentation. This page explains the repository structure and helps you get started. - ---- - -## Quick Links - -| Resource | Location | -|----------|----------| -| **Agent Instructions** | [.github/AGENTS.md](.github/AGENTS.md) | -| **Security Policy** | [.github/SECURITY.md](.github/SECURITY.md) | -| **Code of Conduct** | [.github/CODE_OF_CONDUCT.md](.github/CODE_OF_CONDUCT.md) | -| **Frontend README** | [frontend/README.md](frontend/README.md) | - ---- - -## Repository Structure - -``` -qullamaggie_scanner/ -├── .github/ # GitHub config, workflows, governance docs -│ ├── AGENTS.md # ← Main agent instructions -│ ├── SECURITY.md # ← Security policy -│ ├── CODE_OF_CONDUCT.md -│ ├── workflows/ # CI/CD pipelines -│ └── ISSUE_TEMPLATE/ -├── docs/ # Architecture documentation -│ ├── README.md # ← You are here -│ ├── adr/ # Architecture Decision Records -│ └── architecture/ # Technical diagrams -├── frontend/ # Main scanner UI (React + Vite) -├── ibkr_tws/ # Python IBKR service (legacy) -├── tests/ # Test suite -└── ui/ # Streamlit UI (legacy) -``` - ---- - -## Getting Started - -### Frontend (Main Application) - -```bash -cd frontend -npm install -npm run dev -``` - -### Running Tests - -```bash -npm test # Run tests -npm run lint # Lint check -npm run build # Production build -``` - ---- - -## Domains - -| Domain | Tech Stack | Description | -|--------|-----------|------------| -| `frontend/` | React, TypeScript, Vite | Main scanner application | -| `ibkr_tws/` | Python | Interactive Brokers service (legacy) | -| `tests/` | Vitest, Playwright | Test suite | -| `ui/` | Streamlit | Legacy Streamlit UI | - ---- - -## Architecture - -See [docs/architecture/](architecture/) for technical diagrams and design documents. - -See [docs/adr/](adr/) for Architecture Decision Records (ADRs). - ---- - -## Contributing - -1. Create a feature branch (`feat/your-feature`) -2. Make your changes -3. Commit with descriptive message -4. Push and create a Pull Request -5. CI must pass before merge - -See [.github/AGENTS.md](.github/AGENTS.md) for full guidelines. \ No newline at end of file diff --git a/docs/SECURITY.md b/docs/SECURITY.md deleted file mode 100644 index 669587f..0000000 --- a/docs/SECURITY.md +++ /dev/null @@ -1,100 +0,0 @@ -# Security Policy - -## Supported Versions - -We release patches for security vulnerabilities in the following versions: - -| Version | Supported | -| ------- | ------------------ | -| Latest | ✅ | -| < 1.0 | ⚠️ Limited support | - -## Reporting a Vulnerability - -**⚠️ Please do not report security vulnerabilities through public GitHub issues.** - -Instead, please report them via email to: - -📧 **security@sensibleanalytics.co** - -### What to Include - -When reporting a vulnerability, please include: - -1. **Description** - Clear description of the vulnerability -2. **Steps to Reproduce** - Detailed steps to reproduce the issue -3. **Impact Assessment** - Potential impact and severity -4. **Affected Versions** - Which versions are affected -5. **Suggested Fix** - If you have suggestions for fixing the vulnerability (optional) -6. **Proof of Concept** - Code or demonstration that shows the vulnerability (if applicable) - -### Response Timeline - -We take security seriously and aim to respond to security reports within the following timeframes: - -| Severity | Initial Response | Assessment Complete | Fix Released | -|----------|-----------------|---------------------|--------------| -| Critical | Within 24 hours | 7 days | 14 days | -| High | Within 48 hours | 14 days | 30 days | -| Medium | Within 7 days | 30 days | 60 days | -| Low | Within 14 days | 60 days | 90 days | - -### Our Process - -1. **Acknowledgment** - We'll acknowledge receipt of your report within the initial response time -2. **Assessment** - We'll assess the vulnerability and determine its severity -3. **Communication** - We'll keep you informed of our progress -4. **Fix** - We'll develop and test a fix -5. **Disclosure** - We'll coordinate disclosure with you -6. **Release** - We'll release the fix and publish a security advisory -7. **Credit** - We'll credit you in our security advisory (if you wish) - -## Security Best Practices - -### For Users - -- Always use the latest version of our software -- Enable two-factor authentication (2FA) on your accounts -- Keep your dependencies up to date -- Report any suspicious activity immediately - -### For Contributors - -- Never commit secrets, API keys, or credentials to the repository -- Use environment variables for sensitive configuration -- Follow secure coding practices -- Review our [Contributing Guide](CONTRIBUTING.md) for security requirements - -## Security Measures - -We implement the following security measures: - -- ✅ Automated dependency scanning with Dependabot -- ✅ Code scanning with CodeQL -- ✅ Branch protection with required reviews -- ✅ Signed commits (where applicable) -- ✅ Regular security audits -- ✅ Responsible disclosure program - -## Bug Bounty - -We may offer bug bounties for significant security vulnerabilities at our discretion. -Bounties are determined based on: - -- Severity of the vulnerability -- Quality of the report -- Potential impact on users -- Novelty of the vulnerability - -Please contact us at [security@sensibleanalytics.co](mailto:security@sensibleanalytics.co) to discuss bounty eligibility. - -## Past Security Advisories - -We maintain a list of past security advisories in our [Security Advisories](https://github.com/Sensible-Analytics/REPO_NAME/security/advisories) section. - -## Contact - -- 📧 Email: [security@sensibleanalytics.co](mailto:security@sensibleanalytics.co) -- 🔐 PGP Key: [Available upon request] - -Thank you for helping keep Sensible Analytics and our users safe! diff --git a/docs/adr/TEMPLATE.md b/docs/adr/TEMPLATE.md deleted file mode 100644 index 2681a59..0000000 --- a/docs/adr/TEMPLATE.md +++ /dev/null @@ -1,117 +0,0 @@ -# ADR-NNN: [Title of Architecture Decision] - -> **Status:** Proposed | Accepted | Deprecated | Superseded -> **Date:** YYYY-MM-DD -> **Author:** [Name] -> **Reviewers:** [Names] -> **Supersedes:** ADR-NNN (if applicable) - ---- - -## Context - -Describe the situation that prompted this decision. Include: - -- What problem are we solving? -- What constraints exist? -- What forces are at play (technical, business, team)? -- What alternatives were considered? - -### Current State - -[Brief description of the current architecture or situation] - -### Problem Statement - -[Clear statement of the problem or opportunity] - -### Constraints - -- [Constraint 1] -- [Constraint 2] -- [Constraint 3] - ---- - -## Decision - -State the decision clearly and concisely. - -> **We will [decision statement].** - -### Rationale - -Explain why this decision was made: - -1. [Reason 1] -2. [Reason 2] -3. [Reason 3] - -### Alternatives Considered - -| Alternative | Pros | Cons | Why Rejected | -|:---|:---|:---|:---| -| [Option A] | [Pros] | [Cons] | [Reason] | -| [Option B] | [Pros] | [Cons] | [Reason] | - ---- - -## Consequences - -### Positive - -- [Positive outcome 1] -- [Positive outcome 2] - -### Negative - -- [Negative outcome 1] -- [Negative outcome 2] - -### Risks - -- [Risk 1 and mitigation strategy] -- [Risk 2 and mitigation strategy] - ---- - -## Implementation - -### Changes Required - -- [ ] [Change 1] -- [ ] [Change 2] -- [ ] [Change 3] - -### Affected Components - -- `frontend/src/...` -- `ibkr_tws/...` -- `docs/...` - -### Migration Plan - -[If applicable, describe how to migrate from the old approach to the new one] - ---- - -## Compliance - -This ADR affects the following guardrails in `ARCHITECTURAL_GUARDRAILS.md`: - -- [ ] Section X.Y: [Description] -- [ ] No guardrail changes required - ---- - -## References - -- [Link to relevant documentation] -- [Link to related ADRs] -- [Link to PR or issue] - ---- - -## Notes - -[Any additional context, discussions, or decisions that didn't fit above] diff --git a/docs/architecture/diagrams/classes.mmd b/docs/architecture/diagrams/classes.mmd deleted file mode 100644 index 036c88d..0000000 --- a/docs/architecture/diagrams/classes.mmd +++ /dev/null @@ -1,124 +0,0 @@ -```mermaid -classDiagram - %% Base Entities - class User { - +String id - +String email - +String name - +UserRole role - +DateTime createdAt - +create() User - +validate() boolean - } - - class Organization { - +String id - +String name - +List~User~ members - +Settings settings - +create() Organization - } - - %% Enums - class UserRole { - <> - ADMIN - MEMBER - VIEWER - } - - %% Services - class AuthService { - +login(credentials) Token - +register(user) User - +validateToken(token) User - } - - class DeploymentService { - +deploy(project, env) Deployment - +rollback(deploymentId) void - +getStatus(deploymentId) DeploymentStatus - } - - class EnvironmentRegistry { - +List~Environment~ environments - +addEnvironment(env) void - +updateEnvironment(env) void - +getEnvironment(name) Environment - } - - %% Data Models - class Environment { - +String name - +String url - +DatabaseConfig database - +TechStack techStack - +DeploymentInfo deployment - } - - class DatabaseConfig { - +String type - +String host - +int port - +String name - } - - class TechStack { - +String frontend - +String backend - +String database - +String deployment - } - - class Deployment { - +String id - +String project - +String environment - +String status - +DateTime deployedAt - +String commitHash - } - - %% Relationships - User "1" --> "*" Organization : belongs to - Organization "1" --> "*" Environment : manages - - AuthService --> User : authenticates - DeploymentService --> Deployment : creates - EnvironmentRegistry --> Environment : tracks - - User <|-- UserRole - Environment --> DatabaseConfig : uses - Environment --> TechStack : uses - Environment --> Deployment : has -``` - -### Documentation Standards for Types - -Every important type should be documented with: - -1. **Purpose** - What the type represents -2. **Properties** - All fields with types and meanings -3. **Relationships** - How it connects to other types -4. **Usage** - Where it's used in the system - -Example: - -```typescript -/** - * Represents a deployment environment. - * - * @property name - Environment identifier (e.g., "production", "staging") - * @property url - Base URL for the deployed application - * @property database - Database connection configuration - * @property techStack - Technology stack used (frontend, backend, database) - * @property deployment - Deployment details (platform, status, commit) - */ -interface Environment { - name: string; - url: string; - database: DatabaseConfig; - techStack: TechStack; - deployment: DeploymentInfo; -} -``` \ No newline at end of file diff --git a/docs/architecture/diagrams/container.mmd b/docs/architecture/diagrams/container.mmd deleted file mode 100644 index 2f50d94..0000000 --- a/docs/architecture/diagrams/container.mmd +++ /dev/null @@ -1,83 +0,0 @@ -```mermaid -C4Container -title Container Diagram for Sensible Analytics Platform - -Person(admin, "Administrator", "Manages settings and configurations") -Person(user, "User", "Uses analytics applications") - -Container_Boundary(mobile, "Mobile Applications") { - Container(mobile_app, "CardScannerApp", "React Native", "Scans business cards") -} - -Container_Boundary(web_frontend, "Web Frontends") { - Container(prop_roo_frontend, "PropRoo Frontend", "React + Vite", "Property analytics UI") - Container(folio_frontend, "Folio Frontend", "React", "Portfolio tracking UI") - Container(qullamaggie_frontend, "Qullamaggie Frontend", "React", "Stock screening UI") - Container(rentroo_frontend, "Rentroo Frontend", "React", "Property management UI") - Container(crewcircle_frontend, "Crewcircle Frontend", "React", "Workforce management UI") - Container(video_frontend, "Video Analysis Frontend", "React", "Educational video UI") -} - -Container_Boundary(api_layer, "API Layer") { - Container(prop_roo_api, "PropRoo API", "FastAPI", "Property analytics backend") - Container(folio_api, "Folio API", "Rust/Tauri", "Portfolio tracking backend") - Container(qullamaggie_api, "Qullamaggie API", "Python", "Stock screening backend") - Container(rentroo_api, "Rentroo API", "Node.js", "Property management backend") - Container(crewcircle_api, "Crewcircle API", "Node.js", "Workforce management backend") - Container(video_api, "Video Analysis API", "Python", "Video processing backend") -} - -Container_Boundary(ai_services, "AI Services") { - Container(llm_service, "LLM Service", "OpenAI", "Language model processing") - Container(ocr_service, "OCR Service", "OpenAI Vision", "Business card scanning") - Container(transcription_service, "Transcription Service", "OpenAI Whisper", "Video transcription") -} - -Container_Boundary(data_layer, "Data Layer") { - ContainerDb(prop_roo_db, "PropRoo DB", "DuckDB/Parquet", "Property data storage") - ContainerDb(folio_db, "Folio DB", "SQLite", "Portfolio data storage") - ContainerDb(rentroo_db, "Rentroo DB", "PostgreSQL", "Property management data") - ContainerDb(crewcircle_db, "Crewcircle DB", "PostgreSQL", "Workforce data") - ContainerDb(neon_main, "Main Neon DB", "PostgreSQL", "Shared data storage") -} - -System_Ext(vercel, "Vercel", "Deployment platform") -System_Ext(cloudflare, "Cloudflare", "CDN and WAF") -System_Ext(gcp, "Google Cloud Platform", "Compute and storage") -System_Ext(oracle, "Oracle Cloud", "Infrastructure") -System_Ext(yahoo_finance, "Yahoo Finance", "Stock data") -System_Ext(email_provider, "Email Provider", "SendGrid/Resend", "Email notifications") - -Rel(user, prop_roo_frontend, "Uses") -Rel(user, folio_frontend, "Uses") -Rel(user, qullamaggie_frontend, "Uses") -Rel(user, rentroo_frontend, "Uses") -Rel(user, crewcircle_frontend, "Uses") -Rel(user, mobile_app, "Uses") - -Rel(prop_roo_frontend, prop_roo_api, "Calls") -Rel(folio_frontend, folio_api, "Calls") -Rel(qullamaggie_frontend, qullamaggie_api, "Calls") -Rel(rentroo_frontend, rentroo_api, "Calls") -Rel(crewcircle_frontend, crewcircle_api, "Calls") -Rel(mobile_app, card_scanner, "Uses") - -Rel(prop_roo_api, prop_roo_db, "Reads/Writes") -Rel(folio_api, folio_db, "Reads/Writes") -Rel(rentroo_api, rentroo_db, "Reads/Writes") -Rel(crewcircle_api, crewcircle_db, "Reads/Writes") - -Rel(prop_roo_api, vercel, "Hosted on") -Rel(qullamaggie_api, vercel, "Hosted on") -Rel(crewcircle_api, vercel, "Hosted on") -Rel(rentroo_api, oracle, "Hosted on") -PropRoo_API --> cloudflare -Rel(prop_roo_api, neon_main, "Uses") - -Rel(qullamaggie_api, yahoo_finance, "Fetches stock data") -Rel(qullamaggie_api, llm_service, "Uses") - -Rel(card_scanner, ocr_service, "Uses") -Rel(video_api, transcription_service, "Uses") -Rel(video_api, llm_service, "Uses") -``` \ No newline at end of file diff --git a/docs/architecture/diagrams/data-flow.mmd b/docs/architecture/diagrams/data-flow.mmd deleted file mode 100644 index d86d283..0000000 --- a/docs/architecture/diagrams/data-flow.mmd +++ /dev/null @@ -1,117 +0,0 @@ -```mermaid -flowchart TD - subgraph Client["Client Layer"] - User["User"] - Mobile["Mobile App"] - Browser["Browser"] - end - - subgraph Edge["Edge Layer"] - Cloudflare["Cloudflare"] - Vercel["Vercel Edge"] - end - - subgraph API["API Services"] - Gateway["API Gateway"] - Auth["Auth Service"] - Webhook["Webhook Handler"] - end - - subgraph Services["Business Services"] - Property["Property Service"] - Portfolio["Portfolio Service"] - Stock["Stock Service"] - Workforce["Workforce Service"] - OCR["OCR Service"] - Transcription["Transcription Service"] - end - - subgraph External["External Services"] - OpenAI["OpenAI"] - Yahoo["Yahoo Finance"] - Email["Email Provider"] - Stripe["Payment Providers"] - end - - subgraph Data["Data Layer"] - Neon["Neon (PostgreSQL)"] - DuckDB["DuckDB"] - Redis["Redis Cache"] - S3["S3 Storage"] - end - - %% Client to Edge - User -->|HTTPS| Cloudflare - Mobile -->|HTTPS| Vercel - Browser -->|HTTPS| Vercel - - %% Edge to API - Cloudflare -->|Proxy| Gateway - Vercel -->|Proxy| Gateway - - Gateway -->|Validate| Auth - Auth -.->|JWT Token| Gateway - - %% API to Services - Gateway -->|Route| Property - Gateway -->|Route| Portfolio - Gateway -->|Route| Stock - Gateway -->|Route| Workforce - - %% Service interactions - Property -->|Cache| Redis - Property -->|Query| DuckDB - Property -->|Webhook| Webhook - - Portfolio -->|Read/Write| Neon - Stock -->|Fetch| Yahoo - Stock -->|AI Analysis| OpenAI - Workforce -->|Email| Email - - %% OCR Flow - Mobile -->|Upload Image| OCR - OCR -->|Vision API| OpenAI - OpenAI -->|Extract Text| OCR - OCR -->|Save Contact| Neon - - %% Video Analysis Flow - Browser -->|Upload Video| Transcription - Transcription -->|Whisper API| OpenAI - OpenAI -->|Transcript| Transcription - Transcription -->|LLM Analysis| OpenAI - OpenAI -->|Summary| Transcription - - %% Responses - Property -.->|JSON| Gateway - Portfolio -.->|JSON| Gateway - Stock -.->|JSON| Gateway - Workforce -.->|JSON| Gateway - OCR -.->|JSON| Mobile - Transcription -.->|JSON| Browser - - Gateway -.->|HTTPS| Cloudflare - Gateway -.->|HTTPS| Vercel - - %% Data flow labels - style User fill:#f9f,stroke:#333 - style OpenAI fill:#ff9,stroke:#333 - style Neon fill:#9f9,stroke:#333 -``` - -### Data Flow Documentation Requirements - -For each data flow path, document: - -1. **Source** - Where data originates -2. **Destination** - Where data goes -3. **Format** - Data format (JSON, binary, etc.) -4. **Authentication** - How identity is verified -5. **Error handling** - What happens on failure - -Example entry: - -| Flow | Source → Dest | Format | Auth | Error Handling | -|------|--------------|--------|------|----------------| -| User Login | Browser → Gateway | JSON | Password | 401 on failure | -| Stock Query | Stock → Yahoo | API | API Key | Cache fallback | -| OCR Scan | Mobile → OCR | Image | JWT | Retry 3x | \ No newline at end of file diff --git a/docs/architecture/diagrams/system-context.mmd b/docs/architecture/diagrams/system-context.mmd deleted file mode 100644 index d644038..0000000 --- a/docs/architecture/diagrams/system-context.mmd +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: C4 System Context Diagram - Qullamaggie Momentum Scanner ---- -graph TB - subgraph External["External Systems"] - YF[("Yahoo Finance API
Market Data Provider")] - IBKR[("IBKR TWS Gateway
Broker API")] - VERCEL[("Vercel Platform
Hosting & CDN")] - end - - subgraph User["Users"] - TRADER[("Trader / Analyst
End User")] - end - - subgraph System["Qullamaggie Scanner System"] - subgraph Frontend["Frontend Application (React SPA)"] - UI[Web UI
Scanner & Charts] - STORE[Zustand Store
State Management] - CACHE[("IndexedDB Cache
Dexie.js")] - SCORING[Scoring Engine
20-Point Algorithm] - end - - subgraph Backend["Python Backend (Optional)"] - TWS[IBKR TWS Service
Live Scanning] - ENGINE[Scanner Engine
Decision Station] - end - end - - TRADER -->|"Opens in browser"| UI - UI -->|"Manages state via"| STORE - STORE -->|"Reads/Writes"| CACHE - STORE -->|"Computes scores via"| SCORING - UI -->|"Requests market data"| YF - YF -->|"Returns OHLCV data"| UI - - TRADER -.->|"Optional: Live trading"| TWS - TWS -->|"Socket connection
Port 7496/7497"| IBKR - IBKR -->|"Real-time quotes
& order execution"| TWS - TWS -->|"Feeds data to"| ENGINE - ENGINE -->|"Triggers scans via"| UI - - UI -->|"Deployed to"| VERCEL - VERCEL -->|"Serves static assets"| TRADER - - classDef user fill:#08427b,stroke:#052d4f,color:#fff - classDef system fill:#1168bd,stroke:#0b4884,color:#fff - classDef external fill:#999999,stroke:#666666,color:#fff - classDef container fill:#438dd5,stroke:#2e6aa6,color:#fff - - class TRADER user - class UI,STORE,CACHE,SCORING,TWS,ENGINE container - class YF,IBKR,VERCEL external diff --git a/docs/scanner-preview.png b/docs/scanner-preview.png deleted file mode 100644 index 09ac46a56b022bf434d90000228c5d5433cbdd24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81097 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 McFwl-HhvHO3&=OxJ^%m!