Accepted
FeedForward requires a web-based user interface that balances several factors:
Development Efficiency: - Limited development resources - Preference for unified technology stack - Desire to minimize context switching between languages
Application Requirements: - Server-rendered pages with selective interactivity - Form-heavy user interfaces for assignments and feedback - Non-real-time nature (feedback generation has acceptable delays) - Need for both student and instructor interfaces
Technical Considerations: - Team's existing expertise in Python - Need for maintainability and ease of onboarding - Balance between developer experience and user experience
Alternatives Considered: - React/Vue/Angular: Client-side JavaScript frameworks - Django: Full-featured Python web framework - Flask: Lightweight Python web framework - Streamlit: Python-based data app framework
We have chosen FastHTML with HTMX for the frontend, paired with FastAPI for backend services, based on the following considerations:
Unified Python Environment: This combination allows development entirely in Python, simplifying the development process, debugging, and maintenance.
Reduced Context Switching: By staying within a single language ecosystem, we minimize the cognitive load of switching between different programming paradigms.
Server-Side Rendering with Progressive Enhancement: FastHTML provides server-side rendering while HTMX enables interactive features without complex client-side JavaScript.
Familiarity and Expertise: The team has existing Python expertise, making this approach more efficient than learning entirely new frontend frameworks.
Appropriate for Non-Real-Time Requirements: Since the application doesn't require instant feedback (1-2 minute delays are acceptable), a server-rendered approach with selective interactivity is well-suited.
Simplified State Management: Server-side state management is often simpler to reason about than complex client-side state.
Direct Integration with Backend Services: Using Python throughout allows for seamless integration with the LLM services and database operations.
Modern JavaScript frameworks were considered but not chosen for these reasons: - Additional Complexity: Would require maintaining separate frontend and backend codebases - Learning Curve: Would necessitate expertise in both Python and JavaScript ecosystems - Overhead for Requirements: The interactivity needs of the application don't justify the complexity of a full SPA framework - Development Speed: Server-side rendering with targeted interactivity allows for faster development for our specific needs
The implementation uses:
This approach maintains a clean separation of concerns while keeping the technology stack unified around Python.