EduRepo
Knowledge needs versions, permissions and history.
Flow summarized from the reviewed implementation. Details and limits are explained below; this visualization is not a production screenshot or proof of measured performance.
Problem and publication experience
EduRepo organizes academic work as versioned repositories. Titles, abstracts, institutions, authors, advisors and attachments form a structure that needs to evolve without losing history.
It explores the path from draft to distribution: who can collaborate, which version is being viewed and which files belong to it. It is a personal publication-engineering project, with no institutional-adoption claim.
Modular monolith and data model
Next.js App Router combines UI and API, using TypeScript and service functions for domain access. Prisma represents PostgreSQL; Supabase is a database-hosting option, not a requirement to turn the application into independent services.
The schema separates users, profiles, repositories, collaborators, versions, files, sessions and audit events. Repository/tag combinations uniquely identify versions; upload intents and idempotency records model operational stages.
Authentication and sessions
The flow includes registration, login, logout and password recovery. Passwords use bcrypt; sessions and reset tokens have separate entities. Authenticated mutation and CSRF protection are distinct responsibilities.
Cookies, session validation and actor checks support routes. The project enables investigation of revocation and recovery without confusing a login screen with a fully audited security policy.
Collaboration and role-based access
RBAC distinguishes owner, maintainer, contributor and viewer. Checks combine repository visibility, actor identity and collaboration membership to decide reading or editing.
This model distributes responsibility for work without granting global administrative access. Contracts appear in routes and services; consistency depends on each operation applying the appropriate policy.
Versions and related files
A version groups attachments and maintains a tag within its repository. Main and supplementary files have their own metadata, separate from physical storage locations. This allows artifact lookup without treating storage paths as business identities.
Repository and version pages expose this organization. Entity relationships and history help answer which material was published and by whom as the application evolves.
Two-stage uploads and signed URLs
The presign/complete flow separates authorization from transfer. The server authorizes an intent while the client transfers to S3-compatible storage; completion checks identity, intent validity and metadata before registration.
AWS SDK integrates Backblaze B2 through S3 compatibility. Code attempts size and MIME verification through HEAD; some failures are audited and processing continues. Hardening must account for that behavior: attempted verification does not guarantee rejection of every invalid upload.
Idempotency, cache and limits
Critical operations accept an Idempotency-Key and store responses with expiration. Coordinating repeated calls reduces duplication within implemented paths; persistent records complement local caching.
Redis supports caching and rate limiting when configured, with an in-memory fallback. That fallback helps development but does not provide shared coordination across instances. TTLs define when responses and counters stop being reused.
Search, audit and moderation
Search combines title, abstract and institution with year, visibility and pagination filters. The reviewed implementation uses textual Prisma queries; semantic ranking and advanced full-text search are not presented as completed features.
Events record actor, action, target and metadata. Administration surfaces handle audit and moderation. ClamAV integration still contains a placeholder; this page does not describe it as an executed antivirus scan.
Observability and tests
API wrappers collect metrics; structured logs, Prometheus export and optional OpenTelemetry instrumentation give operational context. Health and diagnostic routes help distinguish dependency failures from application errors.
Code includes Vitest tests for routes, validation, caching, idempotency and services plus Playwright scenarios. The workflow defines typechecking, tests and builds; lint and audit have failure-tolerant paths. Suites were inspected without measuring coverage or deploying EduRepo.
Demonstrated decisions and next steps
The project connects publication experience with access contracts, file transfer and traceability. It demonstrates full-stack integration, relational modeling, validation and request-coordination mechanisms.
Evolution priorities include closing permissive upload paths, completing real scanning, testing multiple instances and advancing search and digital preservation. Unmeasured user counts, availability and efficiency figures are not claimed.