Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
29679a8
Branding: Update with latest NLR logos
simmsa May 22, 2026
67a577a
Dev: Lint
simmsa May 22, 2026
b40e132
Dev: Add biome front end lint
simmsa May 22, 2026
c855224
Frontend: Add folder picker component
simmsa May 22, 2026
3757c4f
Frontend: Add large folder service helpers
simmsa May 22, 2026
f57b314
Frontend: Add modal for suggesting large folder usage
simmsa May 22, 2026
043cdfa
Frontend: Add user facing aws sync page with virtualization
simmsa May 22, 2026
6a45048
App: Add aws sync upload support
simmsa May 22, 2026
68c80a5
Frontend: Dev, configure biome linter/formatter
simmsa May 22, 2026
91b0ed0
Frontend: Add services for job tracking
simmsa May 22, 2026
67620b9
Frontend: lint
simmsa May 22, 2026
410e0d6
Frontend: lint
simmsa May 22, 2026
fccda46
Frontend: lint
simmsa May 22, 2026
c631d0a
Frontend: lint
simmsa May 22, 2026
12557c1
Frontend: lint
simmsa May 22, 2026
587e588
Frontend: lint
simmsa May 22, 2026
90d24eb
Frontend: lint
simmsa May 22, 2026
8ad3b98
Frontend: lint
simmsa May 22, 2026
e714a70
Frontend: lint
simmsa May 22, 2026
7bfa263
Frontend: lint
simmsa May 22, 2026
ff72460
Frontend: lint
simmsa May 22, 2026
d9898f2
Frontend: lint
simmsa May 22, 2026
0076a09
Frontend: lint
simmsa May 22, 2026
83350b7
Frontend: lint
simmsa May 22, 2026
c5ec2c9
Frontend: lint
simmsa May 22, 2026
b9e4015
Frontend: Add github links to about modal
simmsa May 22, 2026
f0a3cd7
Frontend: Update NLR logo link
simmsa May 22, 2026
33e0188
Frontend: lint
simmsa May 22, 2026
f2602c0
Frontend: lint
simmsa May 22, 2026
0403750
Frontend: lint
simmsa May 22, 2026
f5f3c1d
Frontend: Load CSV history async
simmsa May 22, 2026
e2d986e
Frontend: lint
simmsa May 22, 2026
9b7b5c0
Frontend: lint
simmsa May 22, 2026
49a6677
Frontend: lint
simmsa May 22, 2026
1676365
Frontend: lint
simmsa May 22, 2026
eda01df
Frontend: lint
simmsa May 22, 2026
be9bf95
Frontend: lint
simmsa May 22, 2026
02e092a
Frontend: lint
simmsa May 22, 2026
79cc844
Frontend: Lint
simmsa May 22, 2026
31297e7
Lint
simmsa May 22, 2026
b2f25f0
Frontend: lint tests
simmsa May 22, 2026
c82dcce
Frontend: Lint utils
simmsa May 22, 2026
477fe93
Frontend: Lint hooks
simmsa May 22, 2026
7473634
Frontend: Lint stores
simmsa May 22, 2026
002c6bb
Frontend: Lint types
simmsa May 22, 2026
a9fdbc8
Frontend: Refactor and lint pages
simmsa May 22, 2026
08c69c5
Frontend: Lint css
simmsa May 22, 2026
0e9b95e
Frontend: Add large folder upload route
simmsa May 22, 2026
cf6a265
Frontend: Lint app entry
simmsa May 22, 2026
2753a50
Frontend: Lint main
simmsa May 22, 2026
70aec82
Frontend: Add folder browser components
simmsa May 22, 2026
df825e4
Frontend: Add store tests
simmsa May 22, 2026
5f40684
Backend: add generic SSE manager
simmsa May 22, 2026
1f123e2
Backend: Add common job model
simmsa May 22, 2026
b39c6ce
Backend: Add generic service for handling file operations
simmsa May 22, 2026
3534581
Tetst: fix failing tests
simmsa May 22, 2026
9c804ea
Backend: Leverage models for upload manager
simmsa May 22, 2026
3da29b5
Backend: enable WAL for sqlite
simmsa May 22, 2026
5319a0b
Backend: Leverage DRY models in delete_manager
simmsa May 22, 2026
cff7cf5
Backend: Leverage SSE manager for uploads
simmsa May 22, 2026
dd60054
Backend: Add large folder upload route
simmsa May 22, 2026
e7eddb2
Backesd: Use os.walk for file search
simmsa May 22, 2026
e1bccb1
Backend: Leverage sse manager for deletions
simmsa May 22, 2026
52541d6
Config: Add log file support to file extensions
simmsa May 22, 2026
5495df0
App: Update init to support new features
simmsa May 22, 2026
3f513bb
Settings: Spec out user facing extensions
simmsa May 22, 2026
7c90533
Version: Bump to 1.1.0
simmsa May 23, 2026
d6424e9
Feature: Add auto update modal that leverages tags/versions for updates
simmsa May 23, 2026
6135451
Frontend: Fix failing tests
simmsa May 23, 2026
0b28f43
Dev: Add copilot instructions
simmsa May 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Copilot Instructions

## Architecture & Tech Stack

This project is a hybrid Flask + React application for uploading MCAP files to AWS S3.

- **Backend (`app/`)**: Python 3.11+ Flask API.
- Serves the built React frontend from `frontend/dist`.
- Uses `boto3` for AWS S3 operations.
- Uses `modaq_toolkit` for MCAP file parsing.
- Handles file uploads, duplicate detection, and progress tracking via SSE.
- **Frontend (`frontend/`)**: React 19 SPA built with Vite.
- TypeScript, TailwindCSS, Zustand (state), TanStack Table.
- Communicates with backend via `/api/*` endpoints.
- Proxies to backend port 5000 during development.

## Development Workflow

- **Backend**: Run `python app.py` (serves on :5000).
- **Frontend**: Run `cd frontend && npm run dev` (serves on :3000, proxies `/api` to :5000).
- **Production**: Frontend is built to `frontend/dist`, which Flask serves statically.

## Build, Test, and Lint Commands

### Python (Backend)
- **Test**: `pytest tests/ -v` (Single file: `pytest tests/test_mcap_service.py -v`)
- **Lint**: `ruff check app/ tests/`
- **Format**: `ruff format app/ tests/`
- **Type Check**: `mypy app/`

### JavaScript/TypeScript (Frontend)
- **Build**: `cd frontend && npm run build` (outputs to `frontend/dist`)
- **Test**: `cd frontend && npm run test` (Vitest)
- **Lint**: `cd frontend && npm run lint` (Biome)
- **Type Check**: `cd frontend && npm run typecheck`

## Key Conventions

### Branding & UI
- **Organization Name**: National Laboratory of the Rockies (**NLR**). **NEVER** use "NREL".
- **CSS Classes**: Use `nlr-` prefix for custom classes (e.g., `nlr-blue-500` in Tailwind).
- **Icons**: Import icons ONLY from `frontend/src/utils/icons.tsx` (abstraction over lucide-react). Do not import directly from icon libraries.

### Data & S3
- **S3 Paths**: Use Hive partitioning: `year=YYYY/month=MM/day=DD/hour=HH/minute=M0/filename.mcap`.
- Minutes are bucketed to 10-minute intervals (00, 10, 20...).
- **Timestamps**: Extracted from MCAP files using `MCAPParser` from `modaq_toolkit`.

### Project Structure
- `app/routes/main.py`: Serves the React app (`frontend/dist/index.html`).
- `app/routes/upload.py`: Handles upload logic and SSE progress streams.
- `app/static`: **Legacy/Unused**. Do not use for new frontend code; work in `frontend/`.
6 changes: 4 additions & 2 deletions app/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@

def _sse_cleanup_worker() -> None:
"""Background worker that periodically cleans up stale SSE queues."""
from app.routes.upload import _cleanup_old_sse_queues
from app.services.sse_manager import get_sse_manager

while not _cleanup_stop_event.wait(timeout=300): # Check every 5 minutes
try:
removed = _cleanup_old_sse_queues()
removed = get_sse_manager().cleanup_old_queues()
if removed > 0:
from app.services.log_service import get_log_service

Expand Down Expand Up @@ -72,6 +72,7 @@ def inject_display_name() -> dict[str, str]:
# Register blueprints
from app.routes.delete import delete_bp
from app.routes.files import files_bp
from app.routes.large_folder_upload import large_folder_upload_bp
from app.routes.logs import logs_bp
from app.routes.main import main_bp
from app.routes.settings import settings_bp
Expand All @@ -83,6 +84,7 @@ def inject_display_name() -> dict[str, str]:
app.register_blueprint(settings_bp, url_prefix="/api/settings")
app.register_blueprint(logs_bp, url_prefix="/api/logs")
app.register_blueprint(delete_bp, url_prefix="/api/delete")
app.register_blueprint(large_folder_upload_bp, url_prefix="/api/large-folder-upload")

# Start background SSE cleanup thread
_start_sse_cleanup()
Expand Down
Loading
Loading