Updated specifications to reflect that User Story 4 (Product/Service
Registration and Management) is out of scope for the proof-of-concept.
Admin UI for product/user management is deferred in favor of manual
YAML file editing.
Specification Updates:
spec.md:
- Marked User Story 4 as [DEFERRED FOR POC]
- Added rationale: Manual management sufficient for POC
- Added manual management approach documentation
- Preserved original requirements (strikethrough) for future reference
- Updated FR-045 to FR-054 to indicate DEFERRED or IMPLEMENTED status
- Clarified which features work via YAML vs need admin UI
plan.md:
- Added POC Scope Update note in Summary section
- Documented that User Stories 1-3 are IMPLEMENTED
- Explained User Story 4 deferral and manual management approach
- Preserved original plan structure for future reference
tasks.md:
- Marked Phase 6 header as [DEFERRED FOR POC]
- Added comprehensive rationale and manual management guide
- Documented what's already implemented (models, access control)
- Listed manual operations: create product, edit product, create user, etc.
- Clarified that underlying features work, only admin UI is deferred
- Preserved all T140-T192 tasks for future implementation
- Added "Future Consideration" note
Rationale:
For a proof-of-concept, the admin UI adds no validation value. The core
functionality (anonymous submission, AI analysis, dashboard access) is
fully implemented and testable. Products and users can be managed via
YAML files:
- Products: data/products/{id}/config.yaml
- Users: data/users.yaml (with bcrypt passwords)
What Works Without Admin UI:
✅ Multi-product support (Product model + access control)
✅ Product owner assignment (via users.yaml product_ids field)
✅ Unique submission URLs per product (submission_url_slug)
✅ Archived product blocking (checked in submission route)
✅ Role-based access (owners see assigned, admins see all)
Decision Benefits:
- Reduces POC scope to essential features
- Eliminates ~53 admin UI tasks (T140-T192)
- Maintains all core product/user functionality
- Enables faster POC validation
- Can be implemented later if scaling is needed
Next Steps:
Focus on Phase 7 (Polish) - production hardening, documentation,
performance verification, and deployment readiness.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
191 lines
10 KiB
Markdown
191 lines
10 KiB
Markdown
# Implementation Plan: Anonymous Feedback Platform (Reklamator)
|
||
|
||
**Branch**: `001-build-an-application` | **Date**: 2025-10-15 | **Spec**: [spec.md](./spec.md)
|
||
**Input**: Feature specification from `/specs/001-build-an-application/spec.md`
|
||
|
||
**Note**: This template is filled in by the `/speckit.plan` command. See `.specify/templates/commands/plan.md` for the execution workflow.
|
||
|
||
## Summary
|
||
|
||
Build a minimal web application using Flask that enables anonymous feedback submission with AI-powered analysis and translation. The system uses a file-based storage approach with folders for each submission, YAML metadata files, and markdown-formatted AI analysis reports. Product owners access analyzed feedback through an authenticated web dashboard. Design prioritizes simplicity and functionality over aesthetics - plain HTML without CSS frameworks or JavaScript libraries.
|
||
|
||
**POC Scope Update (2025-10-17)**: User Story 4 (Product/Service Registration and Management) has been **deferred** for the proof-of-concept. Products and users will be managed manually via YAML configuration files (`data/products/{id}/config.yaml` and `data/users.yaml`). This decision removes admin UI complexity while maintaining full functionality for POC validation. User Stories 1-3 (Anonymous Submission, AI Analysis, Dashboard) remain in scope and are **IMPLEMENTED**.
|
||
|
||
## Technical Context
|
||
|
||
**Language/Version**: Python 3.11+
|
||
**Primary Dependencies**: Flask (web framework), no CSS frameworks, no JavaScript libraries
|
||
**Storage**: File-based - folders per feedback item with YAML metadata and markdown reports
|
||
**Testing**: pytest (contract and integration tests prioritized per constitution)
|
||
**Target Platform**: Linux server (web application)
|
||
**Project Type**: web (backend + frontend, but minimal frontend without frameworks)
|
||
**AI Integration**: NEEDS CLARIFICATION - Claude API or pluggable AI provider interface
|
||
**Performance Goals**: Handle 100 concurrent submissions, <3s dashboard load for 1000 items
|
||
**Constraints**: <30s AI analysis time for 95% of submissions, complete anonymity (no IP/session tracking)
|
||
**Scale/Scope**: MVP supports 100 products, 10,000 feedback items per product, 50+ languages
|
||
**File Upload**: NEEDS CLARIFICATION - malware scanning approach, storage location strategy
|
||
**Authentication**: NEEDS CLARIFICATION - session management approach for product owners
|
||
**Rate Limiting**: NEEDS CLARIFICATION - implementation strategy for submission abuse prevention
|
||
|
||
## Constitution Check
|
||
|
||
*GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.*
|
||
|
||
### ✅ I. Specification-First Development
|
||
**Status**: PASS
|
||
Complete specification exists at `specs/001-build-an-application/spec.md` with prioritized user stories (P1-P4), 64 functional requirements with unique IDs (FR-001 to FR-064), measurable success criteria (SC-001 to SC-014), and comprehensive edge cases. All user stories are independently testable.
|
||
|
||
### ✅ II. Test-First Discipline
|
||
**Status**: PASS (Will be enforced during implementation)
|
||
Plan includes pytest as testing framework. Implementation phase will follow mandatory workflow: write tests → verify failures → implement code → refactor. Contract and integration tests prioritized per constitution.
|
||
|
||
### ✅ III. Independent User Stories
|
||
**Status**: PASS
|
||
Four user stories explicitly prioritized (P1: Anonymous Submission, P2: AI Analysis, P3: Dashboard, P4: Product Management). Each story is independently deliverable and testable. P1 can function standalone, P2 depends only on P1, P3 on P1+P2, P4 adds multi-product support.
|
||
|
||
### ✅ IV. Simplicity & Justification
|
||
**Status**: PASS
|
||
Design explicitly minimizes complexity: plain HTML without CSS frameworks, no JavaScript libraries, file-based storage (no database), Flask for web framework (minimal dependencies). User input emphasizes "designed as simple as possible" and "functionality over design."
|
||
|
||
**Potential Complexity Point**: File-based storage vs. database
|
||
- **Decision**: File-based storage with folder-per-feedback structure
|
||
- **Rationale**: Simpler deployment, no database setup/maintenance, natural fit for storing files+metadata together, sufficient for MVP scale (100 products × 10k items)
|
||
- **Alternative Rejected**: PostgreSQL/SQLite - adds operational complexity, requires schema migrations, doesn't simplify file attachment handling
|
||
|
||
### ✅ V. Documentation as Code
|
||
**Status**: PASS
|
||
Specification-driven workflow with all documentation in version control under `/specs/001-build-an-application/`. This plan will generate: research.md, data-model.md, contracts/, quickstart.md per constitution requirements.
|
||
|
||
### Gate Result: ✅ PASS - Proceed to Phase 0 Research
|
||
|
||
No constitutional violations detected. Complexity Tracking table remains empty.
|
||
|
||
## Project Structure
|
||
|
||
### Documentation (this feature)
|
||
|
||
```
|
||
specs/[###-feature]/
|
||
├── plan.md # This file (/speckit.plan command output)
|
||
├── research.md # Phase 0 output (/speckit.plan command)
|
||
├── data-model.md # Phase 1 output (/speckit.plan command)
|
||
├── quickstart.md # Phase 1 output (/speckit.plan command)
|
||
├── contracts/ # Phase 1 output (/speckit.plan command)
|
||
└── tasks.md # Phase 2 output (/speckit.tasks command - NOT created by /speckit.plan)
|
||
```
|
||
|
||
### Source Code (repository root)
|
||
|
||
```
|
||
reklamator/
|
||
├── app/
|
||
│ ├── __init__.py # Flask app factory
|
||
│ ├── routes/
|
||
│ │ ├── __init__.py
|
||
│ │ ├── submission.py # Anonymous feedback submission endpoints
|
||
│ │ ├── dashboard.py # Product owner dashboard endpoints
|
||
│ │ └── admin.py # Product/owner management endpoints
|
||
│ ├── services/
|
||
│ │ ├── __init__.py
|
||
│ │ ├── feedback_storage.py # File-based storage operations
|
||
│ │ ├── ai_analyzer.py # AI analysis/translation interface
|
||
│ │ └── auth.py # Session management
|
||
│ ├── models/
|
||
│ │ ├── __init__.py
|
||
│ │ ├── feedback.py # Feedback domain model
|
||
│ │ ├── product.py # Product domain model
|
||
│ │ └── user.py # Product owner/admin model
|
||
│ ├── templates/ # Plain HTML templates (Jinja2)
|
||
│ │ ├── submission_form.html
|
||
│ │ ├── dashboard.html
|
||
│ │ ├── feedback_detail.html
|
||
│ │ └── admin_products.html
|
||
│ └── utils/
|
||
│ ├── __init__.py
|
||
│ ├── file_validator.py # File upload validation
|
||
│ └── rate_limiter.py # Submission rate limiting
|
||
│
|
||
├── data/ # File-based storage root
|
||
│ └── products/
|
||
│ └── {product-id}/
|
||
│ └── feedback/
|
||
│ └── {feedback-id}/
|
||
│ ├── metadata.yaml
|
||
│ ├── analysis.md
|
||
│ └── attachments/
|
||
│
|
||
├── tests/
|
||
│ ├── contract/ # API contract tests
|
||
│ │ ├── test_submission_api.py
|
||
│ │ ├── test_dashboard_api.py
|
||
│ │ └── test_admin_api.py
|
||
│ ├── integration/ # User journey tests
|
||
│ │ ├── test_feedback_submission_flow.py
|
||
│ │ ├── test_ai_analysis_flow.py
|
||
│ │ └── test_dashboard_access_flow.py
|
||
│ └── unit/ # Optional unit tests for complex logic
|
||
│ ├── test_feedback_storage.py
|
||
│ └── test_file_validator.py
|
||
│
|
||
├── config/
|
||
│ ├── development.py
|
||
│ ├── production.py
|
||
│ └── testing.py
|
||
│
|
||
├── requirements.txt
|
||
├── pytest.ini
|
||
└── run.py # Application entry point
|
||
```
|
||
|
||
**Structure Decision**: Selected web application structure (Option 2 variant) with backend-focused layout since frontend is minimal (plain HTML templates). Flask follows a single-project structure but organized by layers (routes/services/models). The `data/` directory implements the file-based storage requirement with nested folders per product and feedback item. Templates directory contains plain HTML served by Flask without separate frontend build process.
|
||
|
||
## Complexity Tracking
|
||
|
||
*Fill ONLY if Constitution Check has violations that must be justified*
|
||
|
||
No violations detected. Table remains empty.
|
||
|
||
---
|
||
|
||
## Post-Design Constitution Re-Check
|
||
|
||
*Re-evaluated after Phase 1 design completion*
|
||
|
||
### ✅ I. Specification-First Development
|
||
**Status**: PASS (unchanged)
|
||
Design artifacts (research.md, data-model.md, contracts/, quickstart.md) generated from specification. No implementation code written yet.
|
||
|
||
### ✅ II. Test-First Discipline
|
||
**Status**: PASS (unchanged)
|
||
API contracts define testable behaviors. Contract tests can be written before implementation. Quickstart guide includes test-first workflow examples.
|
||
|
||
### ✅ III. Independent User Stories
|
||
**Status**: PASS (unchanged)
|
||
Data model and API contracts support independent implementation of P1→P2→P3→P4 stories. Each has clear endpoints and data structures.
|
||
|
||
### ✅ IV. Simplicity & Justification
|
||
**Status**: PASS (confirmed post-design)
|
||
- File-based storage design confirmed (YAML + Markdown)
|
||
- No database complexity introduced
|
||
- Minimal dependencies: Flask + 7 small extensions
|
||
- Plain HTML templates (no CSS frameworks, no JavaScript)
|
||
- Direct file I/O (no ORM or abstraction layers)
|
||
- Single-project structure (no microservices)
|
||
|
||
**Design Review**: All research decisions favor simplicity. No new complexity introduced during Phase 1.
|
||
|
||
### ✅ V. Documentation as Code
|
||
**Status**: PASS (enhanced)
|
||
Generated artifacts:
|
||
- ✅ research.md (7 decision records)
|
||
- ✅ data-model.md (6 entities fully specified)
|
||
- ✅ contracts/ (3 web route contracts: submission, dashboard, admin)
|
||
- ✅ quickstart.md (developer onboarding guide)
|
||
- ✅ CLAUDE.md (agent context updated)
|
||
|
||
All documentation version-controlled, linked to spec.md.
|
||
|
||
### Final Gate Result: ✅ PASS - Ready for Phase 2 (Task Generation)
|
||
|
||
No constitutional violations introduced during design phase. Proceed to `/speckit.tasks` command.
|