🧩 1. What Your Frontend Already Does (for a researcher)
Your React frontend is exceptionally feature‑rich. It covers almost every aspect of a modern research platform:
| Feature Area | Frontend Modules | What the researcher can do |
|---|---|---|
| Authentication & profile | useAuth, useProfile, LoginPage, RegisterPage, SettingsPage |
Sign up, log in (with 2FA), manage profile, security question, upload avatar, change password, follow/unfollow, bookmarks. |
| Articles & publishing | useArticle, useArticles, useCreateArticle, ArticlesPage, ArticleDetailPage |
Write, edit, publish articles; search, filter, like, comment, generate citations; view analytics (views, likes, comments). |
| Messaging & collaboration | useMessaging, MessagesPage, UnifiedInboxPage, ChatArea, ChatSidebar |
Private chats, group chats, secret chats (E2EE), voice/video calls, polls, reactions, threads, forward messages, archive, mute, pin, scheduled messages, ephemeral messages. |
| Notifications | useSmartNotifications, SmartNotificationCenter |
Receive real‑time notifications (like, comment, mention, follow), batch notifications during deep work, AI‑priority classification. |
| Research tools | useRagSystem, ResearchAssistantPage, GapAnalysisPage, GrantAssistantPage, GenUIPage |
Ask AI about indexed documents (RAG), explore knowledge graphs, generate hypotheses, get grant deadlines, create generative UI components. |
| Lab inventory | useLabInventory, LabInventoryPage |
Manage chemicals, scan barcodes, check compatibility, receive low‑stock/expiry alerts. |
| Peer review | usePeerReview, PeerReviewPage |
Submit papers anonymously, claim reviews, submit structured reviews. |
| Data hub | useResearchObjectRepository, DataHubPage |
Upload research objects (datasets, code, presentations), manage protocols, submit preregistrations. |
| Project management | useProjectTaskManager, useProjectSpace, ProjectWorkspacePage |
Kanban tasks, team members, link outputs. |
| Events | EventPage, NetworkingPage |
Create/join events, RSVP, set reminders, export iCal. |
| Workspace (SmartGlass) | SmartGlassWorkspace, useSmartGlassWorkspace |
Multi‑panel environment (AI chat, editor, browser, inventory). |
| Voice assistant | useVoiceAssistant, VoiceAssistantWidget |
Speech recognition, text‑to‑speech, wake word, settings. |
| Command palette | KBar, CommandPaletteProvider |
Ctrl+K to navigate, run actions, AI predictions. |
| Admin | useAdminStats, AdminPage |
View platform stats, manage users, articles, reports. |
In short: The frontend is already a full‑fledged research ecosystem. The missing pieces are almost entirely backend – services, endpoints, and infrastructure.
🧩 2. How Frontend Modules Talk to the Backend
Every feature above relies on API calls to your Java backend. The frontend uses Axios (via api.js) to send HTTP requests, and WebSocket for real‑time updates.
Example: Publishing an article
- User writes article in
CreateArticlePage→ callsuseCreateArticle.submit()→POST /api/articleswith{ title, abstract, body, tags, status }. - Backend stores article, returns
ArticleDTO. - Frontend redirects to
ArticleDetailPage, which callsGET /api/articles/{id}and displays it.
Example: Sending a group message
- User types in
ChatArea→sendMessage→POST /api/groups/{groupId}/messageswith{ body, replyTo, mentions, mediaIds, pollId }. - Backend saves
GroupMessageand broadcasts via WebSocket to all group members. - Frontend receives WebSocket event
new_group_messageand appends it to the chat.
Example: RAG assistant
- User asks a question in
ResearchAssistantPage→queryRag→POST /api/ai/rag-chatwith{ messages, sources }. - Backend (RAGService) embeds the query, searches vectors, calls LLM, and returns
{ reply, sources }. - Frontend displays answer with cited sources.
Every interaction is a clean API call. The frontend does not hold business logic; it only renders UI and calls endpoints.
🧩 3. What’s Missing to Make the System “Completely Work Together”
From our earlier audit, the backend is missing:
A. Service layer (business logic) – 20+ services not implemented
You have repositories, but no services that orchestrate them. Example: ArticleService.create() should:
- Validate input
- Save article using
ArticleRepository - Update user’s article count
- Add tags to
tagstable - Send notification to followers (async)
- Index article in Elasticsearch
- Trigger citation graph update
None of that is written.
B. Route handlers – many endpoints are empty stubs
Even though you have ArticleRoutes.java, AuthRoutes.java, etc., most methods only print logs and return dummy responses. They must be filled with actual calls to the services.
C. Missing endpoints (from frontend perspective)
- Collections (paper collections)
- Reference manager (citations, DOI/BibTeX import)
- Preprint submission (screen, submit)
- Provenance (audit trail)
- Unified inbox (aggregate all messages)
- Recent items (for command palette)
- Several analytics endpoints
D. Infrastructure & cross‑cutting concerns (needed for production)
- Proper authentication (JWT with refresh tokens, CSRF)
- Rate limiting per user/IP (you have
TokenBucketbut not integrated) - Asynchronous processing (email, PDF generation, notifications) – currently everything is synchronous
- Real‑time WebSocket clustering (so messages reach all instances of the backend)
- Caching (Redis) – to avoid repeated DB hits for trending articles, user profiles
- Logging & metrics – to monitor health and debug
- Database migrations (Flyway) – to version your schema
- Testing (unit, integration, e2e)
- Containerisation & orchestration (Docker, Kubernetes)
- API documentation (Swagger)
E. Missing DTOs (over 30 DTOs) – the frontend expects structured JSON, but your backend returns raw entities or ObjectNode. You need dedicated DTOs for each request/response.
🧩 4. How the Missing Pieces Would Complete the Researcher’s Workflow
Once everything is implemented, a researcher’s journey would be seamless:
| Step | Researcher Action | System Reaction |
|---|---|---|
| 1. Discovery | Searches for “machine learning in cancer” | Frontend calls GET /api/articles/search → Elasticsearch returns ranked results; GET /api/recommendations/feed shows personalised suggestions. |
| 2. Reading & annotation | Opens an article, highlights text, adds a note | Frontend calls POST /api/articles/{id}/notes (missing) – would save inline notes. |
| 3. Asking AI | Clicks “Research Assistant”, asks “Summarise this paper” | Backend RAGService retrieves relevant chunks, LLM generates summary with citations, frontend displays. |
| 4. Collaborating | Creates a private chat with a co‑author | Backend creates conversation, real‑time WebSocket allows instant messaging. |
| 5. Peer review | Submits a paper anonymously | Backend stores submission, assigns a reviewer (via PeerReviewService), sends email notification. |
| 6. Grant writing | Uses Grant Assistant to draft proposal | Backend calls LLM (via external API) to generate draft from RFP. |
| 7. Data sharing | Uploads a dataset to Data Hub | Backend stores file in S3, registers DOI, makes it citable. |
| 8. Time management | Adds an event “Paper deadline” | Backend saves event, sends reminder email when due. |
| 9. Profile building | Connects ORCID, adds publications | Backend fetches publications from ORCID API, adds to user’s profile. |
| 10. Admin oversight | Checks platform stats | Backend computes real‑time metrics from AnalyticsService, admin sees charts. |
All these steps rely on backend features that are currently missing or stubbed.
🧩 5. Roadmap to Make Everything Work Together
Phase 1: Core Services & Endpoints (2‑3 weeks)
- Implement UserService, ArticleService, MessageService, GroupService (highest priority).
- Implement all missing endpoints (collections, references, preprints, provenance, unified inbox, recent items).
- Create all DTOs and map entities to DTOs.
Phase 2: Real‑time & Asynchronous (1‑2 weeks)
- Implement WebSocketManager (using Spring WebSocket) – handle
new_message,typing,reactionbroadcasts. - Add SSE for notifications (or use WebSocket for everything).
- Introduce
@Asyncfor email sending, PDF generation, and indexing.
Phase 3: Security & Infrastructure (2 weeks)
- Replace custom token with JWT (store in
HttpOnlycookie orAuthorizationheader). - Add rate limiting using
TokenBucket(integrate with a filter). - Set up Flyway for migrations.
- Write Dockerfile and docker-compose.yml for local dev (PostgreSQL, Redis, RabbitMQ, Elasticsearch).
Phase 4: Observability & Testing (1 week)
- Add Prometheus metrics (via Micrometer).
- Add structured JSON logging.
- Write integration tests for critical endpoints (using Testcontainers).
Phase 5: Production Hardening (ongoing)
- Kubernetes manifests, CI/CD pipeline (GitHub Actions), API documentation (Swagger), stress testing (JMeter).
🧩 6. Conclusion
Your frontend is production‑ready – it already implements all the researcher‑facing features. The backend is a skeleton with repositories and stub routes. To make the platform truly “help the researcher in all ways”, you must:
- Implement the 20+ service classes (business logic).
- Fill in the route handlers with actual service calls.
- Add missing endpoints (collections, references, preprints, etc.).
- Introduce infrastructure (caching, async, WebSocket clustering, observability).
🧭 1. The Big Picture: How Frontend & Backend Fit Together
Your frontend is a single‑page React application (SPA) that communicates with a Java backend via:
- REST API – for most data operations (CRUD, search, analytics).
- WebSocket – for real‑time messaging, typing indicators, online presence, and instant notifications.
- Yjs WebSocket – for collaborative document editing (separate server).
The backend is not yet complete – you have repositories (data access) and stub route handlers, but missing the service layer (business logic), many DTOs, and several key endpoints.
When fully implemented, the backend will expose ~200 REST endpoints and handle ~10 WebSocket message types. The frontend consumes these to provide a researcher‑centric experience.
🧩 2. Frontend Feature Modules & Their Backend Needs
2.1 Authentication & User Management
- Frontend:
LoginPage,RegisterPage,SettingsPage,ProfilePage,useAuth,useProfile,useSecuritySettings - Backend required:
- JWT‑based authentication (login, refresh token, logout)
- 2FA (TOTP) – enable, verify, disable, backup codes
- Security question (set, answer, reset password)
- Profile CRUD (full name, bio, affiliation, ORCID, Google Scholar, website, privacy)
- Avatar upload / deletion
- Email change with verification
- Account deactivation
- Follow / unfollow, followers / following lists (paginated)
- Contacts list (users you follow, with mutual follower count, online status)
- Bookmarks (add/remove article, list bookmarked articles)
- Liked articles (list articles the user liked)
- Missing pieces: Most of the user service methods are stubs. Also missing:
GET /api/users/me/liked-articlesandGET /api/users/me/contacts(though contacts exists, it may need real data). The session management (token storage, CSRF) must be implemented.
2.2 Articles & Content
- Frontend:
ArticlesPage,ArticleDetailPage,CreateArticlePage,useArticle,useArticles,useCreateArticle - Backend required:
- CRUD for articles (title, abstract, body, tags, status)
- Search with filters (q, author, tag, date range, status) and pagination
- Like / unlike articles (track per user)
- Comments (list, add, delete)
- Citation generation (APA, MLA, BibTeX)
- Analytics per article (daily views, likes, comments over time)
- User analytics (total views, likes, comments, top articles)
- Related articles (co‑citation, bibliographic coupling, PageRank)
- Trending and featured articles
- Missing pieces:
ArticleServicemissing;ArticleRepositoryexists but service logic is absent. The graph‑based recommendations (co‑citation, bibliographic) require building a citation graph – not started. The analytics endpoints are stubs.
2.3 Messaging & Collaboration
- Frontend:
MessagesPage,ChatArea,ChatSidebar,UnifiedInboxPage,useMessaging - Backend required:
- Private conversations (list, create, delete, get messages, send, edit, delete, reactions, typing, read receipts)
- Group chats (CRUD, members, admins, mute, pins, invite links)
- Group messages (send, edit, delete, search, reactions, threads)
- Secret chats (E2EE with X3DH + Double Ratchet)
- Message forwarding (single, multiple)
- Polls / quizzes (create, vote, close, results)
- Scheduled messages (future delivery)
- Ephemeral messages (auto‑delete after TTL)
- Media attachments (upload, retrieve, delete)
- Search within conversations (full‑text)
- Archive (private conversations) and unarchive
- Unread counts and read status tracking
- Missing pieces: The
MessageServiceandGroupServiceare almost completely absent. Real‑time WebSocket broadcasting is not implemented (WebSocketManagermissing). Secret chat key exchange endpoints missing (GET /api/conversations/{username}/keys). Polls, scheduled messages, ephemeral messages are not implemented at all.
2.4 Real‑time Notifications
- Frontend:
SmartNotificationCenter,useSmartNotifications,useWebSocket - Backend required:
- Notification storage (type, message, read, link)
- SSE or WebSocket push for new notifications
- Mark as read / unread, delete, delete all
- Smart notification settings (deep work mute, batching, quiet hours)
- Missing pieces:
NotificationServiceis a stub;SseManagernot implemented; notification batching and AI priority not connected to real system.
2.5 Research Assistant (RAG)
- Frontend:
ResearchAssistantPage,useRagSystem - Backend required:
- Document ingestion (upload PDF, TXT, HTML) → chunking, embedding, vector storage (HNSW)
- Query embedding and similarity search
- LLM chat (RAG) with citations
- Conversation history per user
- Command palette AI predictions
- Missing pieces:
RagServiceis not implemented; the embedding model and vector index are not integrated; document indexing endpoints are stubs.
2.6 Gap Analysis (Knowledge Graph)
- Frontend:
GapAnalysisPage,useGapAnalysis,KnowledgeGraphCanvas - Backend required:
- Graph nodes (papers, concepts, methods, findings, gaps) and edges (cites, related, contradicts, supports)
- Full CRUD for nodes and edges
- AI‑powered gap identification (given a topic, suggest missing edges)
- Hypothesis generation from a node
- Export / import graph
- Missing pieces:
GapAnalysisServiceis a stub; the AI part is not connected; graph storage is in‑memory only (no persistence).
2.7 Grant Assistant
- Frontend:
GrantAssistantPage,useGrants - Backend required:
- CRUD for grants (name, agency, deadline, amount, status)
- Upcoming deadlines (sorted)
- AI draft generation from RFP (needs LLM integration)
- Missing pieces:
GrantServicenot implemented; AI draft not connected.
2.8 Lab Inventory
- Frontend:
LabInventoryPage,useLabInventory - Backend required:
- Chemicals (CRUD, location, quantity, expiry, NFPA, barcode)
- Alerts (low stock, expiring, incompatible)
- Barcode scanning and registration
- Compatibility checking (based on NFPA or rule set)
- Statistics (total, low stock, expiring, alerts)
- Missing pieces:
LabInventoryServicemostly absent; compatibility rules not implemented; alert generation not automated.
2.9 Peer Review
- Frontend:
PeerReviewPage,usePeerReview - Backend required:
- Anonymous submissions (title, abstract, manuscript URL, keywords)
- Review assignment (admin or claim)
- Structured review (scores, comments, recommendation, confidence)
- Reviewer credentials (ORCID, expertise)
- Submission status tracking (pending, assigned, reviewed)
- Missing pieces:
PeerReviewServiceis a stub; the assignment logic and anonymisation not fully implemented.
2.10 Data Hub (Research Objects, Protocols, Preregistrations)
- Frontend:
DataHubPage,useResearchObjectRepository,useProtocolsWorkspace,usePreregistration - Backend required:
- Research objects (upload file, metadata, DOI, versioning)
- Protocols (steps, forking, public/private)
- Preregistrations (templates, sections, submission with DOI)
- Missing pieces:
DataHubServicenot implemented; file upload storage not connected; DOI generation not done.
2.11 Project Workspace (Kanban)
- Frontend:
ProjectWorkspacePage,useProjectSpace,useProjectTaskManager - Backend required:
- Projects (CRUD, members with roles, outputs)
- Tasks (Kanban columns, priorities, tags, dependencies)
- Activity log (who did what)
- Missing pieces:
ProjectServiceis a skeleton; task assignment and dependencies not implemented.
2.12 Events & Networking
- Frontend:
EventPage,NetworkingPage,useEvents - Backend required:
- Events (CRUD, start/end time, location, virtual link, max attendees)
- RSVP (going, interested, not going)
- Reminders (minutes before)
- iCal export (user’s events)
- Search events
- Missing pieces:
EventServicenot implemented; iCal export not done.
2.13 Workspace (SmartGlass)
- Frontend:
SmartGlassWorkspace,useSmartGlassWorkspace - Backend required:
- User workspace panels (save / restore layout, type, props)
- Presets (built‑in layouts)
- Sharing (create read‑only link)
- Backup / restore (save whole workspace state)
- Missing pieces:
WorkspaceServicenot implemented; sharing and backup not done.
2.14 Voice Assistant
- Frontend:
VoiceAssistantWidget,useVoiceAssistant - Backend required:
- Voice settings (STT language, TTS voice, pitch, rate, auto‑speak, wake word, grammar)
- Multiple profiles and language overrides
- TTS test endpoint
- Wake word training (store custom words)
- Missing pieces:
VoiceSettingsServicenot implemented; speech recognition is done in frontend (Web Speech API), so backend only stores settings. That part is easy.
2.15 Admin
- Frontend:
AdminPage,useAdminStats - Backend required:
- Platform statistics (users, articles, comments, views, likes, groups, messages, notifications, projects)
- User management (list, delete, change role)
- Article management (list, delete, clear all)
- Global search across users, articles, groups, chemicals, grants, projects, etc.
- Recent activity feed
- 2FA usage stats
- RAG documents list
- Missing pieces:
AdminServicemissing; most statistics computed on‑the‑fly but not stored; global search is stubbed.
2.16 Unified Inbox (cross‑origin messages)
- Frontend:
UnifiedInboxPage,useUnifiedInbox - Backend required:
- Aggregate messages from: private conversations, group chats, project discussions, paper Q&A, AI chats, broadcast channels
- Filter by tab (unread, critical, direct, groups, projects, papers, AI, broadcasts)
- Search and date range
- Mark as read / all read
- Forward to another chat
- Missing pieces:
UnifiedInboxServicenot implemented; the endpoint/api/unified-inboxdoes not exist.
2.17 Collections (Paper Collections)
- Frontend:
PaperCollectionsPage,usePaperCollections - Backend required:
- Collections (CRUD, public/private)
- Add/remove papers (by article ID)
- Count papers per collection
- Missing pieces: Entire module missing – no models, repository, service, or endpoints.
2.18 Reference Manager (Citations)
- Frontend:
AuthoringStudioPage(references panel),useReferenceManager - Backend required:
- CRUD references per document (DOI, BibTeX, Zotero, Mendeley)
- Import from DOI and BibTeX
- Groups of references
- Bibliography generation
- Missing pieces: Entire module missing.
2.19 Preprint Submission
- Frontend:
PreprintSubmissionPage,usePreprintSubmission - Backend required:
- Screening (check title, abstract, keywords against criteria)
- Submission (store manuscript, assign DOI, set status)
- Missing pieces: Entire module missing.
2.20 Provenance / Trust
- Frontend: (not yet used but planned) –
useProvenanceexists in frontend code, but no UI page. - Backend required:
- Record provenance events (create, update, delete, publish, like)
- Verify chain (e.g., check digital signatures)
- Missing pieces: Entire module missing.
🧩 3. The Missing “Glue” That Makes Everything Work Together
Even after implementing all services and endpoints, you need cross‑cutting mechanisms to connect them seamlessly:
3.1 Real‑time Event Bus
- When a message is sent, the backend must publish an event (e.g.,
NewMessageEvent). Subscribers (WebSocket manager, notification service, analytics) react accordingly. - This decouples messaging from notifications, read receipts, etc.
- Missing: Spring
ApplicationEventpublisher or Kafka.
3.2 Search Indexer
- Articles, messages, users should be indexed in Elasticsearch or Meilisearch for fast, relevant searching.
- The backend should synchronously update the index when data changes (or asynchronously via queue).
- Missing: Elasticsearch integration.
3.3 Recommendation Engine
- Collaborative filtering + content‑based + popularity scores.
- Requires building a user‑item interaction matrix, computing similarities.
- Can be done with external library (LensKit) or pre‑computed offline.
- Missing: RecommendationService not implemented.
3.4 Background Job Processor
- Tasks like email sending, PDF export, document indexing, and ML inference should be done asynchronously to avoid blocking the HTTP thread.
- Use a message queue (RabbitMQ) and worker threads.
- Missing: Async infrastructure.
3.5 API Gateway & Rate Limiting
- Single entry point for all clients, apply rate limits per user/IP, aggregate logs, add security headers.
- Missing: Spring Cloud Gateway or custom filter.
3.6 API Documentation & Client Generation
- OpenAPI specification (Swagger) allows frontend to generate TypeScript types automatically, reducing mismatches.
- Missing: springdoc‑openapi integration.
3.7 Monitoring & Alerts
- Dashboards (Grafana) for request rates, error rates, latency.
- Alerts when error rate > 1% or queue length > 100.
- Missing: Micrometer + Prometheus + Alertmanager.
🧩 4. How a Researcher Would Use the Complete System
Imagine a researcher named Dr. Smith:
| Step | Dr. Smith’s action | How the system helps |
|---|---|---|
| 1 | Logs in (with 2FA). | AuthService validates credentials, returns JWT. |
| 2 | Browses articles on “CRISPR”. | ArticleService searches Elasticsearch, returns ranked results; RecommendationService suggests personalised papers. |
| 3 | Opens an interesting paper. | ArticleService increments view count; AnalyticsService records daily view. |
| 4 | Asks the AI assistant: “Summarise the methodology”. | RagService retrieves relevant chunk from indexed PDF, LLM generates summary with citation. |
| 5 | Highlights a sentence and adds a note (missing feature). | (Would need a NoteService – not yet planned) |
| 6 | Saves the paper to a collection “CRISPR review”. | CollectionService adds paper to user’s collection. |
| 7 | Starts a group chat with collaborators. | GroupService creates group, adds members; real‑time WebSocket enables instant messaging. |
| 8 | Schedules a meeting via Events. | EventService creates event, sends reminders. |
| 9 | Submits a preprint. | PreprintService screens and registers DOI. |
| 10 | Uploads a dataset to Data Hub. | DataHubService stores file in S3, assigns DOI. |
| 11 | Receives a peer review invitation. | PeerReviewService assigns review; notification sent via WebSocket. |
| 12 | Writes a grant proposal with Grant Assistant. | GrantService uses LLM to draft from RFP. |
| 13 | Publishes an article. | ArticleService publishes; NotificationService notifies followers. |
| 14 | Views dashboard analytics. | AnalyticsService returns user stats (views, likes, citations). |
| 15 | Exports workspace layout (SmartGlass). | WorkspaceService exports panels as JSON. |
All these steps rely on the backend services being implemented and integrated. Currently, only a fraction exists.
🧩 5. Summary: What You Must Build to Make the Platform Complete
| Category | Items |
|---|---|
| Services | 20+ business logic classes (User, Article, Message, Group, Notification, Analytics, GapAnalysis, Grant, Project, DataHub, Poll, Event, LabInventory, PeerReview, Workspace, VoiceSettings, Rag, PasswordReset, TwoFactor, Search, Recommendation, GNNRecommendation, Export, Reference, Collection, Preprint, Provenance) |
| Route handlers | Fill all 200+ endpoints (most are empty stubs) |
| DTOs | 30+ data transfer objects (requests and responses) |
| Missing endpoints | Collections, references, preprints, provenance, unified inbox, recent items, liked articles, secret chat keys, group pinned alias, etc. |
| WebSocket | WebSocketManager, message broadcasting, presence, typing, reaction events |
| Async processing | @Async, message queue (RabbitMQ), workers |
| Search | Elasticsearch integration, indexing, querying |
| Caching | Redis for sessions, rate limiting, frequent queries |
| Security | JWT, CSRF, rate limiting (integrated), OAuth2 (ORCID) |
| Observability | Structured logging, metrics (Prometheus), tracing |
| DevOps | Docker, Kubernetes, CI/CD (GitHub Actions), database migrations (Flyway) |
Your frontend is already a masterpiece – it contains all the researcher‑facing features. The backend is the missing half. Once you implement the above, the platform will be truly complete, helping researchers from literature discovery to publication and beyond.
Let me give you the most exhaustive explanation of your platform’s architecture, data flow, and the missing pieces – so you see exactly how everything should work together to support a researcher’s entire lifecycle.
1. High‑Level System Architecture
Your application is a full‑stack research ecosystem built as a single‑page React frontend communicating with a Java backend over REST and WebSocket. Additionally, there is a separate Yjs WebSocket server for real‑time collaborative editing.
[Browser] ──(REST)──> [Java Backend (port 8080)]
──(WebSocket)──> [Java WebSocket Server (same port or dedicated)]
──(Yjs WebSocket)──> [Collaboration Server (port 9093)]
- REST – for all CRUD, search, analytics, admin, etc.
- WebSocket – for real‑time messaging (private/group), typing indicators, online presence, notifications.
- Yjs WebSocket – for collaborative document editing (used by
ScientificEditorandCollaborativeAuthoringStudio).
The frontend is fully reactive – any change in the backend (new message, like, notification) is pushed via WebSocket and instantly updates the UI. This gives a “real‑time collaboration” feel.
2. Data Flow for a Typical Researcher Action
Let’s trace what happens when a researcher creates an article:
- User navigates to
/create-article→AddArticlePagerenders the editor. - User fills title, abstract, body, tags, and clicks “Publish”.
- The
useCreateArticlehook sends aPOST /api/articlesrequest with the payload. - Backend (currently missing the service) should:
- Validate the input (title not empty, abstract length, etc.).
- Create an
Articleentity. - Save it using
ArticleRepository. - Generate a reading time.
- Update the user’s
articlesCount. - Add tags to the
article_tagstable. - Index the article in Elasticsearch (for future search).
- Dispatch a
NewArticleEvent(to notify followers, update trending, etc.). - Return the created
ArticleDTOwith the assigned ID.
- Frontend receives the response and redirects to
/articles/{id}. - ArticleDetailPage loads using
useArticle, which callsGET /api/articles/{id}. - Backend fetches article from DB and also retrieves like status, comments, author profile.
- Frontend renders the article, and the researcher can now like, comment, share, etc.
Every other feature follows a similar pattern: frontend action → API call → backend service → repository → response → frontend update.
3. Detailed Breakdown of Frontend Features & Backend Dependencies
I will now go through every major frontend module, describe what it does, what backend endpoints it calls, what the backend currently provides, and what is missing.
3.1 Authentication & User Management
Frontend components: LoginPage, RegisterPage, ForgotPasswordPage, JoinPage, SettingsPage, ProfilePage, useAuth, useProfile, useSecuritySettings, usePasswordReset.
Key endpoints called (from frontend):
| Method | Endpoint | Purpose |
|---|---|---|
| POST | /api/login |
Login with username/password, returns JWT + CSRF |
| POST | /api/login/2fa |
Complete login with TOTP code |
| POST | /api/logout |
Invalidate session |
| POST | /api/register |
Create new user |
| POST | /api/token/refresh |
Refresh JWT |
| GET | /api/users/me |
Get current user profile |
| PUT | /api/users/me |
Update profile (fullName, bio, affiliation, etc.) |
| POST | /api/users/me/avatar |
Upload avatar (base64) |
| PUT | /api/users/me/email |
Change email |
| PUT | /api/users/me/password |
Change password |
| GET | /api/users/me/security-question |
Get security question |
| PUT | /api/users/me/security-question |
Set security question & answer |
| GET | /api/users/me/2fa/status |
Check if 2FA enabled |
| POST | /api/users/me/2fa/enable |
Generate secret & QR code |
| POST | /api/users/me/2fa/verify |
Verify TOTP code to enable 2FA |
| POST | /api/users/me/2fa/disable |
Disable 2FA |
| GET | /api/users/me/2fa/backup-codes |
Get backup codes |
| POST | /api/users/me/2fa/backup-codes/regenerate |
Regenerate backup codes |
| POST | /api/forgot-password |
Request security question |
| POST | /api/reset-password |
Reset password using answer |
| POST | /api/users/{username}/follow |
Follow a user |
| DELETE | /api/users/{username}/follow |
Unfollow |
| GET | /api/users/{username}/followers |
List followers |
| GET | /api/users/{username}/following |
List following |
| GET | /api/users/me/contacts |
Get contacts (followed users with extra info) |
| GET | /api/users/me/bookmarks |
List bookmarked articles |
| POST | /api/users/me/bookmarks |
Toggle bookmark (add/remove) |
| GET | /api/users/me/liked-articles |
List articles liked by user |
| GET | /api/search/users |
Search users (by username/fullName) |
Backend status:
- Present but not fully implemented:
UserRepositoryexists, butUserServiceis largely missing. Many endpoints are stubbed. - Missing:
GET /api/users/me/liked-articles(the frontend calls it, but it’s not in the backend). The like tracking is done viaArticleService.isLikedBy, but returning the list of liked articles requires a new endpoint.
What a researcher expects:
- Seamless login, profile editing, avatar upload, password change.
- Follow/unfollow other researchers, see their activity.
- Bookmark papers, see liked articles.
- 2FA for security.
3.2 Articles & Content
Frontend: ArticlesPage, ArticleDetailPage, CreateArticlePage, EditArticlePage, useArticle, useArticles, useCreateArticle.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/articles |
List articles (paginated, filterable) |
| GET | /api/articles/{id} |
Get single article |
| POST | /api/articles |
Create new article |
| PUT | /api/articles/{id} |
Update article |
| DELETE | /api/articles/{id} |
Delete article |
| GET | /api/articles/search |
Search with filters (q, author, tag, dateFrom, dateTo, status) |
| GET | /api/users/me/articles |
Get current user’s articles (including drafts) |
| POST | /api/articles/{id}/like |
Toggle like |
| GET | /api/articles/{id}/like |
Get like status |
| GET | /api/articles/{id}/comments |
List comments |
| POST | /api/articles/{id}/comments |
Add comment |
| DELETE | /api/comments/{commentId} |
Delete comment |
| GET | /api/articles/{id}/citation |
Generate citation (APA/MLA/BibTeX) |
| GET | /api/users/me/analytics |
User analytics (total views, likes, comments, viewsOverTime) |
| GET | /api/articles/{id}/analytics |
Article analytics (daily views, likes, comments) |
| POST | /api/articles/{id}/publish |
Publish a draft |
| GET | /api/articles/trending |
Trending articles (by views/likes) |
| GET | /api/articles/featured |
Featured articles (admin picks) |
| GET | /api/articles/{id}/graph-recommendations |
Graph‑based recommendations (co‑citation, bibliographic, PageRank) |
Backend status:
ArticleRepositoryexists (SQL).ArticleServiceis mostly absent; the route handlers inArticleRoutesare stubs.- Missing:
GET /api/users/me/liked-articles(already noted). Also missingGET /api/articles/featured(no admin picks stored). The graph recommendations require a citation graph – not built.
What a researcher expects:
- Write, edit, publish articles with rich text and tags.
- See article statistics (views, likes, comments over time).
- Get citations in multiple formats.
- Find related papers via co‑citation or bibliographic coupling.
- See trending papers in their field.
3.3 Messaging (Private & Group)
Frontend: MessagesPage, ChatArea, ChatSidebar, useMessaging.
Key endpoints (partial list – there are many):
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/conversations |
List private conversations |
| GET | /api/conversations/{username}/messages |
Get messages with a user |
| POST | /api/conversations/{username}/messages |
Send a message (supports attachments, replyTo) |
| PUT | /api/conversations/{username}/messages/{messageId} |
Edit message |
| DELETE | /api/conversations/{username}/messages/{messageId} |
Delete message |
| POST | /api/conversations/{username}/messages/{messageId}/reactions |
Add/remove reaction |
| POST | /api/conversations/{username}/typing |
Send typing indicator |
| GET | /api/conversations/{username}/typing |
Check if other user is typing |
| POST | /api/conversations/{username}/read |
Mark messages as read (up to a messageId) |
| GET | /api/conversations/{username}/read-status |
Get last read message ID |
| POST | /api/conversations/{username}/archive |
Archive conversation |
| DELETE | /api/conversations/{username}/archive |
Unarchive |
| GET | /api/users/me/archived-conversations |
List archived conversations |
| GET | /api/messages/{messageId}/edits |
Get edit history |
| GET | /api/messages/{messageId}/thread |
Get thread replies |
| POST | /api/messages/{messageId}/reply |
Post a thread reply |
| POST | /api/messages/{messageId}/forward |
Forward to another user |
| POST | /api/conversations/{username}/schedule |
Schedule a message |
| POST | /api/conversations/{username}/ephemeral |
Send ephemeral message (auto‑delete) |
| GET | /api/messages/scheduled |
List scheduled messages |
| DELETE | /api/messages/scheduled/{messageId} |
Cancel scheduled message |
| POST | /api/media/upload |
Upload file (base64 or multipart) |
| GET | /api/media/{mediaId} |
Get media metadata |
| DELETE | /api/media/{mediaId} |
Delete media |
Group messaging:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/groups |
List groups the user belongs to |
| POST | /api/groups |
Create group |
| GET | /api/groups/{groupId} |
Get group details |
| PUT | /api/groups/{groupId} |
Update group (name, description, avatar, slow‑mode) |
| DELETE | /api/groups/{groupId} |
Delete group (admin) |
| GET | /api/groups/{groupId}/members |
List members with roles |
| POST | /api/groups/{groupId}/members |
Add member(s) |
| DELETE | /api/groups/{groupId}/members/{memberId} |
Remove member |
| POST | /api/groups/{groupId}/admins/{memberId} |
Promote to admin |
| POST | /api/groups/{groupId}/members/{memberId}/demote |
Demote from admin |
| POST | /api/groups/{groupId}/leave |
Leave group |
| POST | /api/groups/{groupId}/invite |
Generate invite link |
| GET | /api/join/{token} |
Join via invite token (redirects) |
| GET | /api/groups/{groupId}/messages |
Get group messages |
| POST | /api/groups/{groupId}/messages |
Send group message |
| PUT | /api/groups/{groupId}/messages/{messageId} |
Edit group message |
| DELETE | /api/groups/{groupId}/messages/{messageId} |
Delete group message |
| GET | /api/groups/{groupId}/messages/since |
Get messages since a timestamp |
| POST | /api/groups/{groupId}/read |
Mark messages as read |
| GET | /api/groups/{groupId}/read-status |
Get read status for all members |
| POST | /api/groups/{groupId}/mute |
Mute group notifications |
| DELETE | /api/groups/{groupId}/mute |
Unmute |
| GET | /api/groups/{groupId}/pins |
List pinned message IDs |
| GET | /api/groups/{groupId}/pinned |
(alias for /pins) – missing |
| POST | /api/groups/{groupId}/pin/{messageId} |
Pin a message |
| DELETE | /api/groups/{groupId}/pin/{messageId} |
Unpin |
| POST | /api/groups/{groupId}/transfer/{newOwnerId} |
Transfer ownership |
| GET | /api/groups/{groupId}/meta |
Group metadata (slow‑mode, etc.) |
| POST | /api/groups/{groupId}/polls |
Create a poll/quiz |
| GET | /api/polls/{pollId} |
Get poll details |
| POST | /api/polls/{pollId}/vote |
Vote (optionIds array) |
| POST | /api/polls/{pollId}/close |
Close poll |
| POST | /api/polls/{pollId}/reopen |
Reopen |
| DELETE | /api/polls/{pollId} |
Delete poll |
| GET | /api/polls/{pollId}/results |
Public results |
| GET | /api/polls/{pollId}/analytics |
Detailed analytics (creator/admin) |
| GET | /api/polls/{pollId}/export/csv |
Export results as CSV |
Secret chat endpoints (E2EE):
| Method | Endpoint | Purpose |
|---|---|---|
| POST | /api/secret/prekeys |
Upload pre‑key bundle |
| GET | /api/secret/prekeys/{username} |
Get pre‑key bundle for a user |
| POST | /api/conversations/{username}/start-secret |
Initiate secret chat (X3DH) |
| POST | /api/conversations/{username}/accept-secret |
Accept secret chat request |
| GET | /api/conversations/{username}/keys |
Get peer’s public keys – missing |
| POST | /api/secret/send |
Send encrypted message (Double Ratchet) |
| GET | /api/secret/messages/{conversationKey} |
Retrieve queued secret messages |
| POST | /api/secret/ratchet |
Update ratchet key |
Backend status:
MessageRepositoryandGroupRepositoryexist (SQL).MessageServiceandGroupServiceare almost completely missing. The route handlers inMessagingRoutesare stubs (only logging). WebSocket broadcasting is not implemented.- Missing: Most of the above endpoints have no business logic. The secret chat endpoints are incomplete (e.g., no key storage or ratchet). The poll endpoints are not implemented.
What a researcher expects:
- Real‑time private and group messaging with typing indicators, read receipts, reactions, and file attachments.
- Ability to create polls in groups.
- Secret chats with end‑to‑end encryption.
- Search messages, edit/delete, forward, reply in threads.
- Scheduled and ephemeral messages.
- Archive conversations, mute groups.
3.4 Real‑time Notifications
Frontend: SmartNotificationCenter, useSmartNotifications, useWebSocket.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/notifications |
List user notifications (with pagination, type filtering) |
| GET | /api/notifications/unread-count |
Get unread count |
| POST | /api/notifications/{id}/read |
Mark as read |
| POST | /api/notifications/read-all |
Mark all as read |
| POST | /api/notifications/read-multiple |
Mark multiple by IDs |
| DELETE | /api/notifications/{id} |
Delete one |
| DELETE | /api/notifications |
Delete all for user |
| GET | /api/events |
SSE stream for real‑time notifications (or WebSocket) |
Smart notification settings:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/users/me/notification-settings |
Get settings (deep work mute, batch interval, quiet hours) |
| POST | /api/users/me/notification-settings |
Update settings |
Backend status:
NotificationRepositoryexists (SQL).NotificationServiceis a stub. The SSE/WebSocket push is missing. The smart notification settings are not implemented.
What a researcher expects:
- Receive push notifications for new messages, likes, comments, follows, mentions, etc.
- Mark notifications as read/unread, delete.
- Customise when to be disturbed (deep work mode, quiet hours).
- Batch low‑priority notifications (e.g., 5 likes bundled into one notification).
3.5 Research Assistant (RAG)
Frontend: ResearchAssistantPage, useRagSystem.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| POST | /api/ai/rag-chat |
Ask a question with context from indexed documents |
| POST | /api/ai/chat |
Simple AI chat (no RAG) |
| POST | /api/ai/command-palette/predict |
AI predictions for command palette |
| POST | /api/documents/{docId}/rag-index |
Index a document (multipart) |
| GET | /api/documents/rag-list |
List indexed documents for user |
| DELETE | /api/documents/{docId}/rag-delete |
Delete indexed document |
| GET | /api/ai/conversation |
Get conversation history |
| DELETE | /api/ai/conversation |
Clear history |
| GET | /api/ai/models |
List available LLM models |
| GET | /api/ai/health |
LLM backend health check |
Backend status:
RagServiceis not implemented; the document indexing, vector storage, and LLM integration are missing. The frontend expects a working RAG system, but none exists.
What a researcher expects:
- Upload PDFs, papers, notes, and ask questions like “What are the main findings of paper X?”.
- Get answers with citations to the exact chunk.
- Have a conversation history, clear it, delete documents.
3.6 Gap Analysis (Knowledge Graph)
Frontend: GapAnalysisPage, KnowledgeGraphCanvas, useGapAnalysis.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/gap-analysis/nodes |
List all graph nodes |
| POST | /api/gap-analysis/nodes |
Create node |
| GET | /api/gap-analysis/nodes/{id} |
Get node |
| PUT | /api/gap-analysis/nodes/{id} |
Update node |
| DELETE | /api/gap-analysis/nodes/{id} |
Delete node |
| GET | /api/gap-analysis/edges |
List edges |
| POST | /api/gap-analysis/edges |
Create edge |
| GET | /api/gap-analysis/edges/{id} |
Get edge |
| PUT | /api/gap-analysis/edges/{id} |
Update edge |
| DELETE | /api/gap-analysis/edges/{id} |
Delete edge |
| GET | /api/gap-analysis/nodes/search |
Search nodes by keyword |
| GET | /api/gap-analysis/nodes/type/{type} |
Filter by type |
| GET | /api/gap-analysis/stats |
Graph statistics (node/edge counts, degree distribution) |
| POST | /api/gap-analysis/analyze |
AI‑powered gap analysis (given a topic, suggest missing edges/hypotheses) |
| POST | /api/gap-analysis/generate-hypothesis |
Generate hypothesis from a node |
| GET | /api/gap-analysis/export |
Export full graph as JSON |
| POST | /api/gap-analysis/import |
Import graph from JSON |
Backend status:
GraphRepositoryexists (in‑memory).GapAnalysisServiceis a stub. The AI analysis endpoints are not implemented.
What a researcher expects:
- See a visual graph of papers, concepts, methods, gaps.
- Search and highlight nodes, filter by type.
- Run “gap analysis” on a topic – the AI should propose novel research directions.
- Generate hypotheses from existing nodes.
- Export/import the graph for collaboration.
3.7 Grant Assistant
Frontend: GrantAssistantPage, useGrants.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/grants/deadlines |
Upcoming deadlines (sorted) |
| GET | /api/grants |
User’s grants |
| POST | /api/grants |
Add a grant |
| PUT | /api/grants/{id} |
Update grant |
| DELETE | /api/grants/{id} |
Delete grant |
| POST | /api/grants/generate |
AI draft generation (given RFP text) |
| POST | /api/grants/analyze |
Analyze RFP (match score, requirements) |
Backend status:
GrantRepositoryexists (in‑memory).GrantServiceis missing. AI endpoints are not implemented.
What a researcher expects:
- Keep track of grant deadlines, statuses.
- Upload an RFP (Request for Proposals) and get a draft proposal generated by AI.
- Get a score on how well their research matches the RFP.
3.8 Lab Inventory
Frontend: LabInventoryPage, useLabInventory.
Key endpoints (many – I'll summarise):
- Chemicals CRUD (list, create, update, delete), search, filter by location/type/low stock/expiry.
- Barcode scanning (lookup by barcode, register new barcode).
- Alerts (list, acknowledge, delete).
- Compatibility checking (between two chemicals, based on NFPA or rules).
- Statistics (total, low stock, expiring, alerts).
Backend status:
ChemicalRepositoryandAlertRepositoryexist (in‑memory).LabInventoryServiceis largely missing. Compatibility rules are not implemented.
What a researcher expects:
- Manage lab chemicals with barcode scanning.
- Get alerts when stock is low or chemicals are expiring.
- Check compatibility before storing chemicals together.
- Export inventory to CSV.
3.9 Peer Review
Frontend: PeerReviewPage, usePeerReview.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/peer-review/submissions |
List open submissions (anonymised) |
| POST | /api/peer-review/submit |
Submit a paper |
| GET | /api/peer-review/submissions/{id} |
Get submission details (anonymised) |
| POST | /api/peer-review/submissions/{id}/claim |
Claim a review |
| GET | /api/peer-review/my-assigned |
Submissions assigned to me |
| POST | /api/peer-review/submissions/{id}/review |
Submit review (scores, comments) |
| GET | /api/peer-review/my-reviews |
Reviews I wrote |
| GET | /api/peer-review/my-credentials |
Get reviewer credentials (ORCID, expertise) |
| POST | /api/peer-review/my-credentials |
Save credentials |
Admin endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/admin/peer-review/submissions |
List all submissions |
| POST | /api/admin/peer-review/submissions/{id}/assign |
Assign a reviewer |
| DELETE | /api/admin/peer-review/submissions/{id} |
Delete submission |
| GET | /api/peer-review/stats |
Statistics (pending, assigned, reviewed) |
Backend status:
PeerReviewRepositoryexists (in‑memory).PeerReviewServiceis a stub. The anonymisation and assignment logic are missing.
What a researcher expects:
- Submit papers anonymously for peer review.
- Claim reviews, submit structured reviews (scores, comments, recommendation).
- Keep a profile of expertise to get appropriate assignments.
3.10 Data Hub (Research Objects, Protocols, Preregistrations)
Frontend: DataHubPage, useResearchObjectRepository, useProtocolsWorkspace, usePreregistration.
Research objects endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/repository/objects |
User’s research objects |
| GET | /api/repository/objects/{id} |
Get object |
| POST | /api/repository/objects |
Create object (with file upload) |
| PUT | /api/repository/objects/{id} |
Update metadata |
| DELETE | /api/repository/objects/{id} |
Delete object |
| POST | /api/repository/objects/{id}/download |
Increment download count |
Protocols endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/protocols |
User’s protocols |
| GET | /api/protocols/public |
Public protocols (no auth) |
| GET | /api/protocols/{id} |
Get protocol |
| POST | /api/protocols |
Create protocol |
| PUT | /api/protocols/{id} |
Update |
| DELETE | /api/protocols/{id} |
Delete |
| POST | /api/protocols/{id}/fork |
Fork a protocol |
| GET | /api/protocols/{id}/steps |
Get steps |
| POST | /api/protocols/{id}/steps |
Add step |
| PUT | /api/protocols/{id}/steps/{stepId} |
Update step |
| DELETE | /api/protocols/{id}/steps/{stepId} |
Delete step |
Preregistrations endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/preregistrations |
User’s preregistrations |
| GET | /api/preregistrations/{id} |
Get preregistration |
| POST | /api/preregistrations |
Create draft |
| PUT | /api/preregistrations/{id} |
Update |
| PUT | /api/preregistrations/{id}/sections/{sectionId} |
Update section content |
| POST | /api/preregistrations/{id}/submit |
Submit for DOI (time‑stamped) |
| DELETE | /api/preregistrations/{id} |
Delete |
Backend status:
ResearchObjectRepository,ProtocolRepository,PreregistrationRepositoryexist (in‑memory).DataHubServiceis missing. File upload storage is not implemented. DOI generation is not implemented.
What a researcher expects:
- Share datasets, code, presentations with a DOI (citable).
- Write lab protocols with step‑by‑step checklists, fork other protocols.
- Preregister studies with templates, get a time‑stamped DOI.
3.11 Project Workspace (Kanban)
Frontend: ProjectWorkspacePage, useProjectSpace, useProjectTaskManager.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/projects |
User’s projects (owned + member) |
| POST | /api/projects |
Create project |
| GET | /api/projects/{id} |
Get project |
| PUT | /api/projects/{id} |
Update |
| DELETE | /api/projects/{id} |
Delete |
| GET | /api/projects/{id}/members |
List members with roles |
| POST | /api/projects/{id}/members |
Add member |
| PUT | /api/projects/{id}/members/{userId} |
Update role |
| DELETE | /api/projects/{id}/members/{userId} |
Remove member |
| GET | /api/projects/{id}/tasks |
List tasks |
| POST | /api/projects/{id}/tasks |
Create task |
| GET | /api/projects/{projectId}/tasks/{taskId} |
Get task |
| PUT | /api/projects/{projectId}/tasks/{taskId} |
Update task (title, description, priority, tags, dependencies) |
| PATCH | /api/projects/{projectId}/tasks/{taskId}/move |
Move to another column |
| DELETE | /api/projects/{projectId}/tasks/{taskId} |
Delete task |
| GET | /api/projects/{id}/outputs |
List outputs |
| POST | /api/projects/{id}/outputs |
Add output (link external resource) |
| DELETE | /api/projects/{id}/outputs/{outputId} |
Delete output |
| GET | /api/projects/search |
Search projects by name |
| GET | /api/projects/{id}/activity |
Activity log (stub) |
| POST | /api/projects/{id}/invite |
Invite user by email |
Backend status:
ProjectRepositoryexists (in‑memory).ProjectServiceis a stub. Task dependencies and activity log are missing.
What a researcher expects:
- Manage research projects with a Kanban board (backlog, in progress, review, done).
- Assign tasks to members, set priorities, add tags, create dependencies.
- Link outputs (articles, datasets, presentations).
- See project activity log.
3.12 Events & Networking
Frontend: EventPage, NetworkingPage, useEvents.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/events |
List events (public, with filters) |
| GET | /api/events/upcoming |
Upcoming events (now + future) |
| GET | /api/events/my-events |
Events the user is attending |
| GET | /api/events/{id} |
Get event details |
| POST | /api/events |
Create event |
| PUT | /api/events/{id} |
Update event |
| DELETE | /api/events/{id} |
Delete event |
| POST | /api/events/{id}/image |
Upload event image |
| POST | /api/events/{id}/rsvp |
RSVP (going/interested/not going) |
| GET | /api/events/{id}/attendees |
List attendees |
| POST | /api/events/{id}/reminders |
Set reminder |
| GET | /api/events/{id}/reminders |
Get reminders for user |
| DELETE | /api/events/reminders/{reminderId} |
Delete reminder |
| POST | /api/events/recurring |
Create recurring events |
| GET | /api/events/calendar.ics |
Export user events as iCal |
| POST | /api/events/{id}/invite |
Invite users by email |
| GET | /api/events/search |
Search events |
Backend status:
EventRepositoryexists (in‑memory).EventServiceis missing. The iCal export and reminder email sending are not implemented.
What a researcher expects:
- Create conferences, lab meetings, deadlines.
- RSVP, set reminders, add to calendar (iCal).
- See who is attending.
- Discover events in their field.
3.13 Workspace (SmartGlass)
Frontend: SmartGlassWorkspace, useSmartGlassWorkspace.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/workspace/panels |
Get user’s panels |
| GET | /api/workspace/panels/{id} |
Get a panel |
| POST | /api/workspace/panels |
Create panel |
| PUT | /api/workspace/panels/{id} |
Update panel (title, props, position, size) |
| PATCH | /api/workspace/panels/{id} |
Partial update (e.g., rename) |
| DELETE | /api/workspace/panels/{id} |
Delete panel |
| POST | /api/workspace/panels/{id}/duplicate |
Duplicate panel |
| POST | /api/workspace/panels/reorder |
Reorder panels |
| GET | /api/workspace/panels/export |
Export workspace as JSON |
| POST | /api/workspace/panels/import |
Import workspace from JSON |
| DELETE | /api/workspace/panels/all |
Clear all panels |
| GET | /api/workspace/presets |
List built‑in presets |
| POST | /api/workspace/presets/{presetId}/apply |
Apply preset |
| POST | /api/workspace/panels/{id}/share |
Create shareable link |
| GET | /api/workspace/share/{token} |
View shared panel (no auth) |
| GET | /api/workspace/active |
Get active panel |
| POST | /api/workspace/active/{id} |
Set active panel |
Backend status:
WorkspaceRepositorydoes not exist (not in provided files).WorkspaceServiceis missing entirely. The route handlers are stubs.
What a researcher expects:
- Customise the workspace layout (AI chat, editor, browser, inventory, etc.).
- Save layouts as presets, apply built‑in presets (research mode, grant writing, literature review).
- Share a read‑only version of their workspace.
- Backup/restore workspace state.
3.14 Voice Assistant
Frontend: VoiceAssistantWidget, VoiceSettingsModal, useVoiceAssistant.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/users/me/voice-settings |
Get voice settings |
| PUT | /api/users/me/voice-settings |
Update settings |
| DELETE | /api/users/me/voice-settings/reset |
Reset to default |
| GET | /api/users/me/voice-settings/profiles |
List voice profiles |
| PUT | /api/users/me/voice-settings/profiles/{profileName} |
Save profile |
| DELETE | /api/users/me/voice-settings/profiles/{profileName} |
Delete profile |
| POST | /api/users/me/voice-settings/profiles/{profileName}/activate |
Activate profile |
| GET | /api/users/me/voice-settings/language/{lang} |
Get language overrides |
| PUT | /api/users/me/voice-settings/language/{lang} |
Set language overrides |
| GET | /api/voice/voices |
List system TTS voices |
| POST | /api/voice/tts/test |
Test TTS (returns audio URL) |
| GET | /api/users/me/voice-settings/wake-words |
List wake words |
| POST | /api/users/me/voice-settings/wake-words |
Add wake word |
| DELETE | /api/users/me/voice-settings/wake-words/{word} |
Remove wake word |
| GET | /api/users/me/voice-settings/grammar |
Get custom grammar |
| PUT | /api/users/me/voice-settings/grammar |
Set custom grammar |
| GET | /api/users/me/voice-settings/export |
Export all voice settings (JSON) |
| POST | /api/users/me/voice-settings/import |
Import voice settings |
Backend status:
VoiceSettingsRepositoryexists (in‑memory).VoiceSettingsServiceis missing. The TTS test endpoint would need to generate audio (external service).
What a researcher expects:
- Configure speech recognition language, TTS voice, pitch, speed.
- Set auto‑speak for AI responses.
- Define wake words to activate the assistant hands‑free.
- Manage multiple profiles (e.g., “presentation mode”, “quiet study”).
3.15 Admin
Frontend: AdminPage, useAdminStats.
Key endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/admin/stats |
Platform statistics (users, articles, comments, views, likes, messages, groups, notifications, projects) |
| GET | /api/admin/users |
List all users |
| DELETE | /api/admin/users/{id} |
Delete user |
| GET | /api/admin/articles |
List all articles |
| DELETE | /api/admin/articles/{id} |
Delete article |
| DELETE | /api/admin/articles |
Clear all articles |
| GET | /api/admin/activity |
Recent activity feed |
| GET | /api/admin/search |
Global search across entities (users, articles, groups, chemicals, grants, projects, research objects, polls, events) |
| GET | /api/admin/2fa/status |
2FA usage statistics |
| GET | /api/admin/workspace/panels |
List workspace presets (global) |
| GET | /api/admin/rag/documents |
List all indexed RAG documents |
| GET | /api/admin/stats/activity |
Platform activity over time (users, articles, comments, messages) |
| GET | /api/admin/stats/top-contributors |
Top contributors (by articles, comments, likes) |
| GET | /api/admin/stats/export/json |
Export full platform stats as JSON |
Backend status:
- Some admin endpoints exist in
AdminController, butAdminServiceis missing. Global search is stubbed.
What a researcher (as admin) expects:
- View platform health (user growth, content volume, server uptime).
- Manage users and articles (delete spam, promote to admin).
- Search across all entities.
- Get activity feed (recent registrations, publications, groups).
3.16 Paper Collections
Frontend: PaperCollectionsPage, usePaperCollections.
Key endpoints (missing entirely):
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/collections |
List user’s collections |
| POST | /api/collections |
Create collection |
| DELETE | /api/collections/{id} |
Delete collection |
| POST | /api/collections/{id}/papers |
Add a paper (by article ID) |
| DELETE | /api/collections/{id}/papers/{paperId} |
Remove paper |
Backend status:
- No models, repositories, services, or endpoints.
What a researcher expects:
- Group papers into custom collections (e.g., “Deep learning review”, “Grant proposals”).
- Share collections publicly or keep private.
- Add/remove papers easily.
3.17 Reference Manager
Frontend: AuthoringStudioPage (reference panel), useReferenceManager.
Key endpoints (missing entirely):
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/documents/{docId}/references |
List references for a document |
| POST | /api/documents/{docId}/references |
Add a reference (DOI, BibTeX, or from external source) |
| PUT | /api/documents/{docId}/references/{refId} |
Update reference |
| DELETE | /api/documents/{docId}/references/{refId} |
Delete reference |
| POST | /api/references/connect-zotero |
Import references from Zotero (API key) |
| POST | /api/references/connect-mendeley |
Import from Mendeley (access token) |
Backend status:
- No models, repositories, services, or endpoints.
What a researcher expects:
- Import references from DOI, BibTeX, Zotero, Mendeley.
- Organise references into groups.
- Generate a bibliography in APA, MLA, or BibTeX for a document.
- Insert citations into the collaborative editor.
3.18 Preprint Submission
Frontend: PreprintSubmissionPage, usePreprintSubmission.
Key endpoints (missing entirely):
| Method | Endpoint | Purpose |
|---|---|---|
| POST | /api/preprints/screen |
Screen preprint (check against criteria) |
| POST | /api/preprints/submit |
Submit preprint, assign DOI, set status |
Backend status:
- No models, repositories, services, or endpoints.
What a researcher expects:
- Upload a manuscript, get a quick screening (format, plagiarism check).
- Receive a DOI immediately upon submission (timestamped).
- Track submission status.
3.19 Provenance / Trust
Frontend: useProvenance (hook exists, but no dedicated page yet).
Key endpoints (missing entirely):
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/provenance/{entityType}/{entityId} |
Get provenance events for an entity (article, user, chemical, etc.) |
| POST | /api/provenance/{entityType}/{entityId}/verify |
Verify integrity chain (e.g., check signatures) |
Backend status:
- No models, repositories, services, or endpoints.
What a researcher expects:
- See who created, modified, published an article (audit trail).
- Verify that the content has not been tampered with (e.g., blockchain or digital signatures).
3.20 Unified Inbox
Frontend: UnifiedInboxPage, useUnifiedInbox.
Key endpoint (missing):
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/unified-inbox |
Aggregated messages from all sources (private, groups, projects, paper Q&A, AI chats, broadcasts) |
Backend status:
- No service or endpoint.
What a researcher expects:
- One inbox that shows all conversations (direct messages, group chats, project discussions, paper Q&A, AI assistant chats, broadcast announcements).
- Filter by type, unread, critical, etc.
- Mark as read, forward to another chat.
3.21 Recent Items (Command Palette)
Frontend: App.tsx fetches recent papers and contacts for the command palette.
Key endpoint (missing):
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/recent-items |
Return list of recently viewed articles and recently contacted users |
Backend status:
- No service or endpoint.
What a researcher expects:
- When pressing
Ctrl+K, see recently opened articles and recent chat partners to quickly navigate.
4. Cross‑Cutting Missing Infrastructure
Beyond specific endpoints, the following infrastructure pieces are essential for a production‑grade system:
| Component | Purpose | Current State |
|---|---|---|
| JWT authentication | Stateless auth, refresh tokens, CSRF protection | Custom session tokens (stub) – missing full JWT implementation |
| WebSocket clustering | Broadcast messages to all instances of backend (when multiple servers run) | Not implemented |
| Async task processing | Email, PDF generation, model inference, notifications | Not implemented (everything is synchronous) |
| Message queue (RabbitMQ/Kafka) | Decouple event producers from consumers (e.g., when an article is published, send emails, update search index, notify followers) | Not implemented |
| Caching (Redis) | Cache user profiles, trending articles, recommendations | Not implemented |
| Full‑text search (Elasticsearch) | Fast, relevant search across articles, messages, users | Only SQL LIKE (slow, no relevance ranking) |
| Distributed rate limiting | Prevent abuse across multiple instances | TokenBucket exists but not integrated globally |
| Structured logging & metrics | Log in JSON, expose Prometheus metrics | No structured logging, no metrics |
| Health checks | Liveness/readiness probes for Kubernetes | Only basic /health |
| Database migrations | Version‑controlled schema changes | No migration tool (Flyway/Liquibase) |
| API documentation | OpenAPI/Swagger for client‑side code generation | None |
| Testing | Unit, integration, end‑to‑end tests | None |
5. Summary: What Must Be Implemented
To make your platform truly complete and ready for researchers, you must build:
| Category | Count | Examples |
|---|---|---|
| Services | ~25 | UserService, ArticleService, MessageService, GroupService, NotificationService, AnalyticsService, GapAnalysisService, GrantService, ProjectService, DataHubService, PollService, EventService, LabInventoryService, PeerReviewService, WorkspaceService, VoiceSettingsService, RagService, PasswordResetService, TwoFactorService, SearchService, MediaService, RateLimitService, ContentModeration, CitationGraphService, RecommendationService |
| Route handlers | ~200 | Fill in all missing endpoints (collections, references, preprints, provenance, unified inbox, recent items, etc.) |
| DTOs | ~50 | Request/response objects for all endpoints |
| Models | ~20 | Already have most, but need PreKey, SignedPreKey, Collection, Reference, Preprint, ProvenanceEvent, UnifiedMessage, RecentItem, etc. |
| Utilities | ~15 | SessionManager, WebSocketManager, MailService, FileStorageService, CitationGenerator, ExportConverter, HtmlSanitizer, JwtUtil, TotpUtil, etc. |
| Infrastructure | ~10 | RabbitMQ, Redis, Elasticsearch, Prometheus, Grafana, Flyway, Docker, Kubernetes, GitHub Actions |
Xet Storage Details
- Size:
- 67.3 kB
- Xet hash:
- fc451b96dcad1e84bf70423ec069c987ad0b691c6f05233c3db0ec55b2f7651d
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.