Searchable Database and REST API with historical 1882 catalogue data for the Damascus Public Library. https://natlib.obnx.dev/
Find a file
2025-12-21 18:44:51 +01:00
.github/workflows ci: expose backend URL from repository variables 2025-12-21 11:57:03 +01:00
.run dev(Go): fix Godocs and run configs 2025-08-31 23:55:10 +02:00
backend-go polish(Go): add default limit for books endpoint 2025-12-19 15:41:18 +01:00
backend-ktor chore: upgrade Kotlin deps 2025-12-20 23:32:40 +01:00
craft feat(Go): implement books endpoint 2025-09-05 13:56:25 +02:00
docs docs: add proper README 2025-08-27 00:09:18 +02:00
frontend fix: make nginx also try .html suffix 2025-12-21 18:44:51 +01:00
.editorconfig feat: add pure CSS mobile menu 2025-12-18 22:21:44 +01:00
.gitattributes fix .gitattributes 2025-08-30 11:05:23 +02:00
.gitignore polish(Go): add default limit for books endpoint 2025-12-19 15:41:18 +01:00
docker-compose.dev.yml chore: upgrade Postgres to v18 2025-12-20 19:12:58 +01:00
docker-compose.yml ci: add production compose file and action 2025-12-20 23:08:15 +01:00
generate_docs.sh chore: regenerate docs 2025-12-19 12:34:06 +01:00
generate_FE_client.sh chore: regenerate docs 2025-12-19 12:34:06 +01:00
LICENSE Create LICENSE 2025-08-14 22:33:21 +02:00
openapi.yaml chore: regenerate code for changes 2025-09-05 16:53:35 +02:00
README.md docs: adjust spec and README 2025-09-05 16:36:55 +02:00
redocly.yaml feat: add redocly docs to frontend 2025-08-26 11:46:12 +02:00
restore_dev_db.sh chore: upgrade Postgres to v18 2025-12-20 19:12:58 +01:00

Damascus 1882 Public Library Catalogue

This project is a combination of two things:

  1. Connect my studies in the humanities at Freie Universität Berlin with my current career as a web developer.
  2. Try out new things and tech stacks that I so far didn't have a project for.

University background

I majored in Islamic Studies (MA) in 2018. Part of my MA thesis was an analysis of a library catalogue that was created in Damascus in 1882. Back then, all previously independent collections of endowed books and manuscripts were collected and put together into a newly established public library, which later became the Syrian National Library after independence.

The catalogue for this new library was a printed book detailing every single item and its provenance and therefore very interesting for the study of the history of reading and scholarly life.

Back in 2018 I compiled this (manually) into a LibreOffice Base database (having no clue about databases I used a single table) and used it for my research.

Who this project is for

First and foremost: myself, to have a small, but not trivial project with a clear scale and focus to go wild on useless implementation details. Call it bike-shedding-driven development.

I do intend to publish/host the whole thing and make the data available with searching/filtering so it could actually be used by researchers interested in the data, but if there are any of those left at least seven years after my measly MA thesis I cannot say.

Technical Background

I plan to do the purest form of serious overengineering at its finest. Technologies I have never used and always wanted to try out:

  • Different server-side frameworks in the Java/Kotlin, Swift, C#, and Go ecosystems
  • distributed deployments with Docker/Kubernetes
  • debloated frontends with a clear focus on web standards
  • Spec-driven development with a focus on OpenAPI

⇒ all of those are going to be used here.

Project Outline

I have identified several main guiding project principles:

  1. The database is the source of truth for all other parts. It is a historical source and as such will never change its basic content (adding additional information by researchers is fine, but there should never be more rows).
  2. The database is pre-configured, all backend frameworks must not use ORMs or other tools modifying it.
  3. Deployment is done with Docker (and Kubernetes if I feel really adventurous).
  4. There is only one database in the deployment.
  5. Backend services all follow the same OpenAPI specification to expose the data to the outside via a REST API.
  6. A reverse proxy is used in the deployment setup to route requests to a random backend service, making each of them completely stateless and interchangeable.
  7. The frontend is a fully static website bundled with Vite using Lit web components. I chose Lit because it only provides a very thin layer on top of the Web Components standard. It contains routes to query and filter the data with client-side fetch requests as well as static pages with background information.
  8. The REST API is freely available for anyone to use.

Backend frameworks

Started

Planned

Spec-Complete

Database documentation

For this project the original database has been converted into a proper PostgreSQL database, data has been normalized and split into separate tables and indexes, and proper foreign keys have been added.

Tables

  • book
  • author
  • authors_books (many-to-many)
  • endowment
  • genre

Database schema

Local development

  • TODO: write something here

Deployment

Currently, the project is in a very early stage and is not yet deployed anywhere.