Skip to content

feat: integrate web UI into monorepo with Docker Compose deployment#27

Merged
rorybyrne merged 10 commits into
mainfrom
025-feat-integrate-web
Jan 31, 2026
Merged

feat: integrate web UI into monorepo with Docker Compose deployment#27
rorybyrne merged 10 commits into
mainfrom
025-feat-integrate-web

Conversation

@rorybyrne

Copy link
Copy Markdown
Contributor

Summary

  • Restructured repository into monorepo with server/ (Python backend) and web/ (Next.js frontend) directories
  • Added Docker Compose configuration for single-command deployment with PostgreSQL, server, and web services
  • Created development overlay (docker-compose.dev.yml) with hot-reload support for both services
  • Updated CI workflow with path filtering for monorepo structure

Test plan

  • Run docker compose up and verify all services start healthy
  • Verify web UI is accessible at port 8080
  • Verify API health check at /api/v1/health
  • Run docker compose -f docker-compose.yml -f docker-compose.dev.yml up for dev mode with hot-reload
  • Run pre-commit hooks to verify they work with new structure

Restructure repository into a monorepo with server/ and web/ directories,
enabling single-command deployment of the complete OSA stack.

Changes:
- Move Python backend into server/ directory
- Add webapp as web/ directory (Next.js frontend)
- Create docker-compose.yml for production deployment
- Create docker-compose.dev.yml for hot-reload development
- Add multi-stage Dockerfiles for both services
- Configure health checks and service dependencies
- Update CI workflow for monorepo with path filtering
- Add root Justfile for orchestration commands
- Update documentation with deployment instructions

Closes #25
@github-actions

github-actions Bot commented Jan 17, 2026

Copy link
Copy Markdown

Code Coverage

Package Line Rate Complexity Health
. 68% 0
application 0% 0
application.api 100% 0
application.api.rest 0% 0
application.api.v1 0% 0
application.api.v1.routes 0% 0
application.event 0% 0
cli 40% 0
cli.commands 18% 0
cli.util 53% 0
domain 100% 0
domain.auth 100% 0
domain.auth.adapter 100% 0
domain.auth.command 100% 0
domain.auth.event 100% 0
domain.auth.model 100% 0
domain.auth.port 100% 0
domain.auth.query 100% 0
domain.auth.service 100% 0
domain.curation 100% 0
domain.curation.adapter 100% 0
domain.curation.command 100% 0
domain.curation.event 0% 0
domain.curation.listener 0% 0
domain.curation.model 100% 0
domain.curation.port 100% 0
domain.curation.query 100% 0
domain.curation.service 100% 0
domain.deposition 100% 0
domain.deposition.adapter 100% 0
domain.deposition.command 0% 0
domain.deposition.event 100% 0
domain.deposition.model 0% 0
domain.deposition.port 0% 0
domain.deposition.query 100% 0
domain.deposition.service 0% 0
domain.export 100% 0
domain.export.adapter 100% 0
domain.export.command 100% 0
domain.export.event 100% 0
domain.export.model 100% 0
domain.export.port 100% 0
domain.export.query 100% 0
domain.export.service 100% 0
domain.index 100% 0
domain.index.listener 0% 0
domain.index.model 74% 0
domain.index.service 76% 0
domain.record 100% 0
domain.record.adapter 100% 0
domain.record.command 100% 0
domain.record.event 100% 0
domain.record.listener 0% 0
domain.record.model 100% 0
domain.record.port 100% 0
domain.record.query 100% 0
domain.record.service 100% 0
domain.schema 100% 0
domain.schema.adapter 100% 0
domain.schema.command 100% 0
domain.schema.event 100% 0
domain.schema.model 100% 0
domain.schema.port 100% 0
domain.schema.query 100% 0
domain.schema.service 100% 0
domain.search 100% 0
domain.search.adapter 100% 0
domain.search.command 100% 0
domain.search.event 100% 0
domain.search.model 100% 0
domain.search.port 100% 0
domain.search.query 100% 0
domain.search.service 100% 0
domain.shared 44% 0
domain.shared.model 90% 0
domain.shared.port 100% 0
domain.source 100% 0
domain.source.event 100% 0
domain.source.listener 0% 0
domain.source.model 76% 0
domain.source.schedule 0% 0
domain.source.service 98% 0
domain.validation 0% 0
domain.validation.adapter 100% 0
domain.validation.command 0% 0
domain.validation.event 0% 0
domain.validation.listener 0% 0
domain.validation.model 0% 0
domain.validation.port 0% 0
domain.validation.query 100% 0
domain.validation.service 0% 0
infrastructure 100% 0
infrastructure.event 0% 0
infrastructure.index 0% 0
infrastructure.index.vector 43% 0
infrastructure.messaging 100% 0
infrastructure.oci 0% 0
infrastructure.persistence 0% 0
infrastructure.persistence.adapter 0% 0
infrastructure.source 0% 0
sdk 100% 0
sdk.index 100% 0
sdk.source 100% 0
util 100% 0
util.di 0% 0
Summary 29% (841 / 2883) 0

- Move JSX rendering outside try/catch blocks to satisfy error-boundaries rule
- Escape apostrophes in not-found.tsx
- Remove unused index parameter from SearchHit component
@rorybyrne rorybyrne force-pushed the 025-feat-integrate-web branch from 5877c6d to 0fdf6f6 Compare January 17, 2026 17:54
- Add new records router with GET /{srn} endpoint for fetching records
- Add pagination support to search with offset parameter and has_more flag
- Change search result field from "id" to "srn" for consistency
- Add SQLite support to Alembic migrations with fallback to OSA_DATA_DIR
- Fix Next.js API routing and environment variable handling for Docker
Add chunked processing for data sources to enable:
- Progress saving after each chunk via database commits
- Immediate downstream processing while ingestion continues
- Efficient pagination using NCBI WebEnv session state
- Batch embedding generation for vector indexes

Key changes:
- Add offset, chunk_size, session params to source pull() method
- Implement continuation events for multi-chunk processing
- Add flush() method to index backends with buffering support
- Add FlushIndexesOnSourceComplete listener for data consistency
- Enhance GEO source with retry logic and WebEnv pagination
- Remove default limit from InitialRun config (now required)
- Add CPU-only PyTorch dependency to reduce Docker image size
Update package name, page titles, component text, and code comments
to reflect the new project branding. Add Source Sans 3 font for
improved typography in headings and section titles.
Replace OSA Design System branding with clean scientific interface.
Update color palette to modern neutral tones with friendly radius and
soft shadows. Switch from multiple Google Fonts to Geist/Geist Mono
for better performance and consistency.

feat: add record comparison functionality with keyboard navigation

Implement side-by-side record comparison with pin/unpin functionality.
Add keyboard shortcuts (j/k for navigation, space to pin, esc to exit).
Redesign search results with sidebar layout and detail panel for
better data exploration workflow.
The ty type checker now correctly handles these patterns thanks to
@dataclass_transform() decorators and improved type inference.
@rorybyrne rorybyrne merged commit b8f435f into main Jan 31, 2026
6 checks passed
@rorybyrne rorybyrne deleted the 025-feat-integrate-web branch January 31, 2026 12:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant