30 lines
2.0 KiB
Markdown
30 lines
2.0 KiB
Markdown
3. Architecture Overview
|
|
Core Architecture: Decoupled Frontend & Backend
|
|
|
|
The application is built on a modern, decoupled architecture:
|
|
|
|
Go Backend: A standalone service responsible for all core business logic. This includes user authentication, database interactions, and processing data from third-party integrations. It exposes all functionality through a single GraphQL API.
|
|
|
|
Next.js Frontend: A standalone service that consumes the Go backend's GraphQL API. It is responsible for the entire user interface and user experience. It leverages Next.js's Server-Side Rendering (SSR) capabilities to deliver fast, SEO-friendly pages.
|
|
|
|
This separation of concerns allows for independent development, scaling, and maintenance of the frontend and backend.
|
|
Backend Integrations Model
|
|
|
|
All third-party integrations (e.g., connecting to GitHub) are handled exclusively by the Go backend.
|
|
|
|
Security: API keys and other secrets are stored securely on the server and are never exposed to the client-side.
|
|
|
|
Modularity: Each integration is built as a distinct Go package that implements a common Integration interface. This makes the system extensible, as new integrations can be added without modifying the core application logic.
|
|
|
|
Customization: Users with access to the backend codebase can "install" new integrations by adding the relevant package and recompiling the application.
|
|
|
|
Future Vision: Frontend Plugin System
|
|
|
|
For a future version (v2.0+), a frontend plugin system is envisioned. This is distinct from backend integrations.
|
|
|
|
Purpose: To allow developers to build and add new UI features and functionality directly into the frontend application.
|
|
|
|
Architecture: This will be achieved by running third-party JavaScript code in a sandboxed <iframe> for security.
|
|
|
|
SDK: A dedicated frontend "Plugin API" package (@your-app/plugin-sdk) will be developed. This will be the secure bridge allowing plugins to interact with the main application and render components in designated "slots."
|