A script that archives posts from Gaza Verified profiles (https://gaza-verified.org) to several backends
Find a file
Fabio Manganiello f647e2a279
frontend: More consistent handling of empty query params and route serialization
When serializing query parameters to the route, ensure that empty or
null values are consistently removed. This prevents issues where empty
arrays or strings could lead to unexpected behavior in filtering logic.

Also, donor filter handling in AccountsList has been adjusted to set the
donors query parameter to an empty string when the filter text is
cleared, and also restore the filter text from the query parameter on
mount.
2025-11-08 20:37:05 +01:00
backend Removed duplicate assignment 2025-11-08 19:00:59 +01:00
frontend frontend: More consistent handling of empty query params and route serialization 2025-11-08 20:37:05 +01:00
nginx Simplified nginx.conf 2025-10-11 04:16:15 +02:00
.env.example Add hide donor names feature to API configuration 2025-11-08 17:59:25 +01:00
.gitignore Exclude .internal files 2025-11-08 18:22:10 +01:00
docker-compose.yml Re-added nginx dependency 2025-10-11 04:07:50 +02:00
LICENSE License updated 2025-09-26 03:17:47 +02:00
Makefile Removed frontend build container and switched to local build 2025-09-29 01:36:59 +02:00
README.md Added RSS feeds reference to README.md 2025-10-05 20:05:01 +02:00

gaza-archive

The purpose of this project is to provide a permanent archive of social media posts from verified accounts from Gaza.

As censorship of Palestinian voices may mount also on decentralized social media platforms just like it did on centralized ones, this archive is intended to be a resource for future research and historical documentation.

This project will periodically scrape those profiles for new content and archive any new activities, including their profiles metadata, all the public posts and media attachments.

The official mirror of the archive is available at archive.gaza.onl.

Installation

Dependencies:

cp .env.example .env
# Modify .env file as needed

# Build the frontend files (this should only be required once, or when the
# frontend code is updated)
make

# Start all the services
docker compose up

After the initial sync is completed you will be able to query data from the SQLite database under ./data/app.db, and all attachments will be stored under ./data/media, indexed by username.

Web interface

After starting the services, and after the initial sync is completed, you can access a web interface at http://localhost:8000 to browse the archived content.

Browse raw media

After starting the services, and after the initial sync is completed, you can browse the raw media files at http://localhost:8000/media, indexed by user handle.

API

An OpenAPI specification is available at http://localhost:8000/api/v1/openapi.json once the backend is running.

If you run the service in docker-compose you can also access a Swagger UI at http://localhost:8000/swagger.

RSS

All public list API endpoints are also available as RSS feeds by appending /rss, for example /api/v1/posts/rss.