Armenia Pellazgjike
A managed digital publishing platform for books, translations, and cultural, historical, and linguistic studies, with a bilingual, indexable public library.
Context
Armenia Pellazgjike gives a collection of books and related studies a maintainable publishing and delivery system. Django Admin manages publication and category records, translated metadata, visibility, featured state, covers, and documents. A Django REST API supplies a bilingual Next.js library with localized routes, discoverable book pages, and direct read/download access. I built and maintain the software platform; Berzh Vahram Piranjani remains the author of the books and research it presents.
Make an evolving collection of books and related written work publicly accessible without coupling every editorial change to frontend source code.
The product is a public library rather than an account or commerce system. It combines controlled editorial input, bilingual presentation, document delivery, and indexable pages while keeping the software contribution distinct from the authorship of the material it publishes.
- Only active publications are exposed through the public library.
- Site-interface locale and a publication's own language remain separate concepts.
- Public cover images and book documents need different cache and access behavior.
- Reading and downloading remain available without public accounts, checkout, or payment.
- Public contact handling limits abuse without exposing visitor or submission records.
- Cultural and historical interpretations remain attributed to the published author and works.
My role
I designed, implemented, deployed, and maintain the software platform, including its publication backend, public application, discoverability, document delivery, and operational boundaries.
Contribution boundaries
- Content AuthorshipBerzh Vahram Piranjani is the author of the books, translations, studies, and other written works presented by the platform; my contribution is the software platform.
- Research ClaimsCultural, historical, and linguistic interpretations are attributed to the author and published works rather than presented by the portfolio as established facts.
Platform And Domain Design
Publication catalogue, editorial workflow, public visibility, API, document access, contact handling, and system boundaries.
Backend And Editorial Workflow
Django models, admin-managed publication data, translated fields, public API, read/download behavior, contact handling, and storage selection.
Frontend And Discoverability
Bilingual Next.js delivery, localized routes, metadata, structured data, sitemap, robots, and revalidation.
Deployment And Maintenance
Containerized frontend/backend runtime, persistent catalogue and media state, hosting, software maintenance, and ongoing publication administration.
Collaboration credit
- Berzh Vahram PiranjaniAuthor of the books, translations, studies, and other written works published through the platform.
Architecture
Managed publication and public delivery
09 boundaries · 09 declared relationships
- 01Author and editorial operatorClient
- 02Public readerClient
- 03Search engineExternal Client
- 04Bilingual Next.js public libraryService
- 05Django publication backend and APIAPI
- 06Publication catalogueDatastore
- 07Public cover storageDatastore
- 08Protected document storageDatastore
- 09Containerized application runtimeInfrastructure
Relationship mapInspect 09 connectionsToggle architecture relationships
- Author and editorial operatorRequestDjango publication backend and API
- Django publication backend and APIPersistencePublication catalogue
- Django publication backend and APIPersistencePublic cover storage
- Django publication backend and APIPersistenceProtected document storage
- Public readerRequestBilingual Next.js public library
- Search engineRequestBilingual Next.js public library
- Bilingual Next.js public libraryRequestDjango publication backend and API
- Containerized application runtimeHostingBilingual Next.js public library
- Containerized application runtimeHostingDjango publication backend and API
Engineering decisions
01Keep publication data behind an editorial backend
Toggle decision details
Context
Books, categories, translated descriptions, files, and publication states need to change without rebuilding hard-coded page content.
Selected approach
Manage publication records and visibility in Django Admin and serve active records through Django REST endpoints.
Rationale
Keep editorial state separate from public presentation and allow content maintenance without frontend source changes.
Trade-offs
- Public pages depend on API availability or cached/revalidated output.
- Frontend and API fields must evolve together.
02Separate site locale from publication language
Toggle decision details
Context
The public interface is Albanian/English while individual books may be written in a broader set of languages.
Selected approach
Use sq/en for localized interface routes and store the publication's own language independently on each book.
Rationale
Keep the interface intentionally bilingual while accurately describing works in other languages.
Trade-offs
- Translation fallback must be consistent when localized metadata is incomplete.
- Filters and labels must interpret two related language concepts.
03Give covers and book files different storage behavior
Toggle decision details
Context
Cover images are public presentation assets, while book files need controlled access and different caching behavior.
Selected approach
Use public/cacheable cover storage and private, signed document storage when object storage is configured, with filesystem fallbacks locally.
Rationale
Match access and caching policy to the different purpose of each asset class.
Trade-offs
- Storage configuration has more settings and migration concerns.
- Local and object-storage paths need equivalent application behavior.
04Make localized book pages indexable
Toggle decision details
Context
Public access depends on readers and search engines finding individual works, not only opening a client-side catalogue.
Selected approach
Use localized book routes with canonical and alternate metadata, structured data, sitemap entries, and controlled page revalidation.
Rationale
Treat discoverability as part of delivering a public library while allowing catalogue changes to appear without full frontend rebuilds.
Trade-offs
- Metadata generation adds API fetches and fallback behavior.
- Revalidation introduces a short delay before editorial changes appear everywhere.
Runtime ownership
- 01Containerization
Separate production-oriented containers build and run the Next.js frontend and Django backend.
- 02Reverse Proxy
Application services are loopback-bound behind a separate public-routing boundary.
- 03Hosting
I host and actively maintain the production platform.
- 04Storage
Persistent runtime storage protects catalogue and media state across application rebuilds.
Inspect operational detail
- Object storage can apply separate public-cover and protected-document policies when configured.
- 05Email
The public contact form uses server-side delivery and abuse controls.
- 06Deployment
Production startup applies database migrations before serving the backend and runs a production Next.js build separately.
Current state
- Current
The bilingual public library is deployed in production and receives ongoing software and catalogue maintenance.
- Lesson
Publishing systems benefit from separating editorial data from presentation.
- Lesson
Discoverability is part of the product when the purpose is public access to written work.
- Lesson
Public covers and protected document files have different storage and access needs.
- Lesson
Site locale and publication language are different concepts and should stay separate.
Depth B / Technical inspectionInspect supporting evidence
Domains, provider boundaries, and evidence classifications.
Toggle technical inspection
Inspect supporting evidence
Domain structure
- Publications and categoriesBooks, categories, publishing metadata, year, ISBN, book language, page count, active state, and featured state.
- Translated editorial metadataAlbanian-default translations for category names and selected subtitle, description, and publishing fields.
- Editorial content managementAdmin-managed categories, publications, attached covers and files, visibility, featured state, and access records.
- Public library deliveryAlbanian and English library and book-detail routes with category filtering and responsive presentation.
- Document and media accessPublic/cacheable covers and separately handled book files for online reading and downloads.
- Read and download recordsServer-owned access counters and records with repeated counter increments suppressed inside a short window.
- DiscoverabilityLocalized canonicals and alternates, structured data, sitemap, robots, and revalidated indexable book pages.
- Public enquiriesServer-delivered contact messages with rate-limited, blocked, and sent attempt states.
Integrations
- Media StorageS3-compatible object storage
Apply separate cache and access behavior to covers and book documents when object storage is enabled.
Environment-selected object-storage adapter - EmailTransactional email delivery
Deliver public contact messages without placing provider configuration in the browser.
Environment-configured server-side email
Capability evidence
- System architectureI designed the editorial backend, public application, data, document, discovery, and runtime boundaries.
- API designI built publication, category, read/download, and contact endpoints around the public-library workflow.
- Frontend deliveryI reworked and maintain the bilingual Next.js application and its localized publication pages.
- Domain modellingI model publications, categories, translated metadata, visibility, media, access records, and public enquiries.
- Systems integrationI keep object storage and server-side email behind application-owned configuration and interfaces.
- Relational persistenceI persist publication, category, visibility, access, and contact-control records behind the Django application.
- Deployment and operationsI deploy and actively maintain separate containerized frontend and backend services with persistent state.
- Performance optimizationI use page revalidation, cover dimensions, image optimization, and cache-aware cover storage for public delivery.
- Automated testingI maintain backend coverage for publication access, counters, cover failures, contact delivery, and abuse controls.