Complete implementation of Phase 1-3 (64 tasks): - Phase 1: Project setup with Flask, pytest, configuration - Phase 2: Core infrastructure (auth, models, services, testing) - Phase 3: Anonymous feedback submission with file uploads Features: - Anonymous feedback submission (text and/or up to 3 file attachments) - Multi-language support (any language accepted) - File validation (type, size) and virus scanning (ClamAV) - Product management with active/archived status - File-based storage with YAML metadata - User authentication system (Flask-Login) - CSRF protection and rate limiting - Test coverage: 10 passing tests (contract + integration) Security: - No IP address logging (FR-055 compliance) - File type whitelist and size limits (10MB max) - Virus scanning with graceful degradation - Filename sanitization and secure storage Test Results: - 8 contract tests passed - 2 integration tests passed - End-to-end workflow verified 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
22 lines
593 B
HTML
22 lines
593 B
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Error - {{ product.name }}{% endblock %}
|
|
|
|
{% block content %}
|
|
<div style="text-align: center; padding: 40px 20px;">
|
|
<div style="font-size: 4em; color: #e74c3c; margin-bottom: 20px;">✗</div>
|
|
|
|
<h1>Oops! Something went wrong</h1>
|
|
|
|
<p style="font-size: 1.1em; margin: 20px 0; color: #555;">
|
|
{{ error_message }}
|
|
</p>
|
|
|
|
<div style="margin-top: 40px;">
|
|
<a href="{{ url_for('submission.form', product_slug=product.submission_url_slug) }}" class="btn">
|
|
Try Again
|
|
</a>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|