iv_ ← All projectsPT ↗
02 — Structure / Personal project · in development

EduRepo

Knowledge needs versions, permissions and history.

Next.jsTypeScriptPrismaPostgreSQLRedisS3-compatible storageAWS SDKZodRBACCSRFVitestPlaywrightPrometheusOpenTelemetry
ENGINEERING / EVIDENCEInspected implementation

Flow summarized from the reviewed implementation. Details and limits are explained below; this visualization is not a production screenshot or proof of measured performance.

01Repository
02collaborators
03version
04signed upload
05confirmation
06publication and audit
01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

07

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.

08

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.

09

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.

10

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.

Explore the public repository ↗