La Gazette : Digital family newspaper
Discover how I developed a self-hosted social media and newspaper for my family
A few years ago, my family started a tradition to stay connected and share our lives regularly: a family newspaper. Every month, each family member contributed short anecdotes, photos, and updates about what they’d been up to. These stories were then compiled, edited, and printed into a physical newspaper, which we mailed to our grandparents. A digital PDF version was also shared via email, so everyone could enjoy the updates, no matter where they were.
This project became a wonderful way to preserve memories, spark conversations, and share moments with the whole family. However, it also came with a significant workload. Collecting anecdotes via email, sorting through photos, formatting everything into a template, printing, and mailing (both physically and digitally) required time and effort from everyone involved.
That’s why I decided to streamline the process by creating La Gazette, a digital family newspaper. Inspired by the idea of a private social network, La Gazette allows us to:
- Collect anecdotes and photos directly in the app, eliminating the need for email back-and-forth.
- Automatically compile monthly updates into a digital feed, making it easy to browse and enjoy.
- Access previous editions and anecdotes in a timeline, so no memory is ever lost.
- Generate PDF versions of each edition, preserving the tradition of sharing a physical like newspaper with grandparents and family members.
Web Application
My top priority was ensuring the application was accessible to everyone in the family, regardless of their device (PC, Android, or iOS) while keeping the setup as simple as possible. A web application was the natural choice: no installation required, just a browser and a link. This way, even the least tech-confident family members could join effortlessly.
I chose Flutter for development because of my prior experience with it during an embedded project where I built a mobile app. Flutter’s cross-platform and web capabilities made it ideal for creating a responsive, consistent experience across all devices.
UX/UI
However, since web design isn’t my strongest skill, I started with a Flutter UI template called SocialV, designed for social networks. I stripped out unnecessary features to focus on what mattered for La Gazette and added custom functionality where needed. The result is a clean, intuitive interface that keeps the experience simple and enjoyable for everyone.
Features
With the UI in place, the focus shifted to developing the business logic for La Gazette’s key features.
- Anecdote feed: The first feature was a feed-style display for all anecdotes, similar to social media platforms. Each anecdote is presented with the author’s name, profile picture, publication date, and attached images, making it easy to browse through family updates.
- Direct submission: Next, I built a system for adding new anecdotes directly within the app. Every family member has a personal account, allowing them to quickly submit stories for the next month’s edition. To improve flexibility, I also added the ability to edit or delete submitted anecdotes for the current month.
- Admin panel for compilation: At the end of each month, all submitted anecdotes are gathered in an admin panel. The family member responsible for creating that month’s newspaper can then access this panel to compile the content. Initially, this involved manually copying and pasting text and images into a document to generate the PDF, a process that, while functional, was still time-consuming.
Automated PDF generation: To streamline this further, I developed a tool to automatically generate the PDF newspaper, complete with all anecdotes formatted and ready to share. This eliminates the manual work, making the process faster and more efficient.
Editions archive: A dedicated space is reserved to store and consult all past PDF newspapers, allowing family members to revisit previous editions and relive memories at any time.
Backend
For the backend, I needed a solution to store all anecdotes (text, images, and metadata), host the generated PDF newspapers, and manage user authentication for family members. I chose PocketBase, an open-source, lightweight backend that combines a database, file storage, and authentication into a single, self-hosted package.
PocketBase is designed for simplicity and scalability, making it perfect for small-scale applications like La Gazette. Since my family won’t suddenly grow to thousands of users, its lightweight nature and ease of use were ideal. The admin panel lets me directly manage authentication methods, database schema, and settings without complex configurations.
Its minimal setup and intuitive interface made it the perfect fit for this project.
Self-Hosting
One of the core goals of this project was to self-host the entire application, including the backend, to maintain full control over our data and avoid hosting fees. Since PocketBase supports self-hosting, it aligned perfectly with this objective.
Because I already had a homeserver running, deploying La Gazette was straightforward. I simply created a new Docker container for PocketBase and the Flutter web app, and everything was up and running. This approach ensures that all my family’s stories and data stay private, secure, and entirely within my own infrastructure.
If you want to learn more about my homeserver, see my post here.
Conclusion
La Gazette is more than just a tool—it’s a fun project that keeps my family connected while significantly reducing the manual workload of creating our monthly newspaper. To this day, over 500 anecdotes have been submitted, and 29 editions have been created, preserving our shared memories in a way that’s easy and enjoyable for everyone.
I’m still actively working on improvements, such as adding a map to visualize family anecdotes around the world and displaying fun statistics about our submissions.
If you’re curious or want to build something similar, the entire source code (including the PocketBase schema file) is freely available on GitHub: https://github.com/nicopaulb/Gazette.