Mission Accomplished: Wrapping Up the Freifunk Social Media Archive – GSoC 2025

Project Overview

I’m so proud and excited to be writing this final blog post for Freifunk and to share what I’ve accomplished during GSoC 2025. It feels great to say that I’ve completed the main goals of the project—building a working Social Media Archive for Freifunk’s exported Twitter data. Here’s a quick rundown of the progress I’ve made this summer.

Milestone Highlights – All Goals Completed

  • Select the Static Site Generator (SSG) – Analyzed several existing technologies and decided on Astro as our SSG.
  • SSG Setup – Embraced learning web development for the first time and followed several tutorials to make my first static site using Astro. After this foundation, I reviewed the current state of the Twitter data fields and planned how this information would be extracted from the database.
  • Develop Data Extraction ToolCreated a script to extract relevant fields from the archived SQLite3 database and normalize them into a unified schema.
  • Create Static Site Mockup Generated an initial static website, but now combined it with the parsed and structured Twitter data. 
  • Implement Client-Side Search Upgraded the website features further by adding client-side search functionality by preprocessing and indexing data during the build process.
  • Customizable Theming Support Designed the Social Media Archive with an easily customizable theme so others can adapt it for their own projects, while keeping Freifunk’s iconic pink this final version to reflect their identity.
  • Documentation and DeploymentWrote comprehensive documentation on GitHub explaining how the Social Media Archive works. Also created a separate README for the build process to guide users through prepping the data for use on the site. Lastly, we deployed the website.
  • Test, Optimize, and Ensure Scalability – Tested the site using the full tweet database to ensure performance stayed solid. Also optimized the website build process to improve time complexity, making the SQL-to-Markdown extraction faster.

Final Project Status

Link to live Social Media Archive website

Code Contributions

Link to GitHub Repository

  • Fifteen Pull Requests Merged
  • Thirteen Issues Completed
  • Build-time GitHub Actions created using Renovate
  • Too many nice memories made

I also made six new friends from five different countries while participating in GSoC 2025!

Link to my Midterm Blog Post

Link to my First Blog Post

Technical Highlights

Implementing Client-Side search using Fuse.js:

TypeScript code for rendering search results in HTML
Defining the relative weight of the content and username attributes to improve the relevance of search results
Using DOMPurify to sanitize user input while using the search functionality

Refining the SQL to Markdow data extraction tool:

Part 1 documentation: The flow of the data extraction build scripts
Part 2 documentation: The flow of the data extraction build scripts

Remaining Work

  • Backend refactoring changes could be made to simplify the codebase. As this is my first attempt at web development, it’s likely not everything I did was as efficient as it could have been
  • Advancing the Search functionality so that the user can perform more sophisticated queries, like searching via “AND” keywords or by date.
  • Improving the organization of pages. For example, the Search page should be moved from the index.astro (home) page and replaced with the Tweet page

Challenges & Lessons Learned

I learned that web development is complex—there are many moving parts, tools, and dependencies, and plenty of opportunities for things to go wrong. Yet despite the challenges, it was also incredibly empowering. I was able to transform raw Twitter data stored in an SQL database into a browsable, visual archive. Seeing that transformation come to life was both rewarding and inspiring.

I also came to better understand the realities of working and learning remotely, particularly across significant time zone differences. Asynchronous collaboration can make it harder to stay aligned with teammates, so it’s important to schedule occasional synchronous check-ins to reconnect, clarify goals, and regroup.

Finally, I learned the importance of giving yourself more time than you think you’ll need. Things rarely work perfectly on the first (or even second) attempt. Building in extra time, staying patient, and approaching debugging with a calm, methodical mindset proved crucial to making steady progress.

Conclusion

I’m glad I decided to apply for GSoC back in March. This summer, I experienced real growth and learned many valuable lessons. I’m especially grateful for the generous support from my mentor, Andreas Bräu, the other contributors, and the GSoC and Freifunk communities. GSoC is a fantastic opportunity, and I would highly encourage others to apply.

I’m looking forward to continuing my contributions to the Social Media Archive in the future.

Sandra Taskovic

Midpoint Update: Social Media Archive

Current Progress

Since the kickoff of GSoC 2025 in June, the project has made strong progress. Although I began with limited experience in web development and Static Site Generation (SSG), I’ve been able to complete about 50% of our initial milestones while steadily climbing the learning curve. By following Astro’s blog tutorial, I successfully built the foundational site. In addition, I completed the first version of the SQLite3 extraction tool and developed a “TWEETS” page to display the tweet data. While the tweets are currently hidden, they will be visible on the final version of the site. Please view my screenshots instead:

List of extracted tweets
Viewing details of a tweet
Code snippet from the SQLite3 to Markdown extraction tool
Defining the schema for a Tweets content collection to ensure consistent page generation in Astro.

View a preview the current website here:
https://sandraastro.netlify.app/tweets/

GitHub:
https://github.com/freifunk/social-media-archive

Milestone Completion Overview

  • Select the Static Site Generator – Finalize the choice of SSG—currently, Astro is the preferred option.
  • SSG Setup – Set up the SSG and ensure all related technologies are working. Begin early discussions around prototypes to determine which data fields need to be extracted from the database.
  • Develop Data Extraction Tool – Build a script to extract relevant fields from the archived SQLite3 database and normalize them into a unified schema.
  • Create Static Site Mockup – Generate an initial static website using the parsed and structured data. 
  • Implement Client-Side Search – Define minimal site features. Add client-side search functionality by preprocessing and indexing data during the build process.
  • Test, Optimize, and Ensure Scalability – Conduct thorough testing and optimization. Ensure the site remains stable and the search remains accurate, even when additional archives are added.
  • Design and Implement Theming Support – Build an engaging, Freifunk-inspired frontend and implement support for customizable themes via configuration files.
  • Documentation and Deployment – Write comprehensive documentation and deploy the final static site.

Reflections

Astro, the web framework we’re using to build the website, has excellent documentation. Following their initial blog tutorial was instrumental in helping me grasp the fundamentals and gain momentum early in the project. It energized me and reinforced the importance of good documentation. If a project is hard to understand or use due to poor documentation, its impact decreases. Therefore, I am committed to providing clear documentation for my contributions to the Social Media Archive.

June presented challenges, particularly when trying to balance other commitments. There were times when staying on top of tasks proved difficult. I’m glad to have refocused and gotten back on track. I’ve learned that meaningful progress tends to come from small, consistent steps, and I plan to maintain that approach moving forward. Now that I’ve started using GitHub Issues, I believe I’ll be able to scope tasks more clearly and work more effectively.

Highlights & Wins

I’ve enjoyed learning new tools, such as SQLite3, Astro, and Netlify, in the context of web development. It’s also been fun switching between different languages such as Python, TypeScript, JavaScript, Markdown, CSS, and HTML. While I’m not yet an expert in most of these, this experience has given me considerable confidence in my ability to learn and apply new tools effectively within a formal codebase.

Conclusion

I’m excited for what’s to come in July. Now that some of the core technical components are in place, I’m looking forward to beginning prototype of what the final site could look like. This task will be a key step in personalizing the site for Freifunk and tailoring it to their specific needs. Thanks again to Andi for his continued support. 

Building Freifunk’s Social Media Archive Explorer

Introduction

Hi, it’s been great to meet you all this summer.

I’m Sandra Taskovic, an Honors Computing Science student at the University of Alberta in Canada. This summer, I’m excited to participate in a 90-hour Google Summer of Code project, where I will develop a Social Media Archive Explorer for the Freifunk community.

Project Need

Freifunk has accumulated valuable content across its past social media accounts. This project aims to harness that existing data and re-display it in a new, user-friendly static site. This Social Media Archive Explorer will give the Freifunk community greater independence and long-term control over its outreach history while staying aligned with its commitment to open-source tools.

The archive also aims to engage the community in celebrating its achievements. I’ll design a Freifunk-inspired frontend to ensure the experience is functional and reflective of the community’s spirit, further supporting its ongoing growth and outreach.

Technologies

  • Programming Languages: TypeScript / JavaScript
  • Static Site Generator (SSG): Astro
  • Data Source: Archived SQLite3 database of past X (formerly Twitter) posts
  • Data Extraction: Custom script developed to parse and extract relevant content for the site
  • Frontend: Additional UI libraries and design packages will be used to create a Freifunk-inspired theme and aesthetic

Plan of Action

  1. Select the Static Site Generator – Finalize the choice of SSG—currently, Astro is the preferred option.
  2. SSG Setup – Set up the SSG and ensure all related technologies are working. Begin early discussions around prototypes to determine which data fields need to be extracted from the database.
  3. Develop Data Extraction Tool – Build a script to extract relevant fields from the archived SQLite3 database and normalize them into a unified schema.
  4. Create Static Site Mockup – Generate an initial static website using the parsed and structured data.
  5. Implement Client-Side Search – Add client-side search functionality by preprocessing and indexing data during the build process.
  6. Test, Optimize, and Ensure Scalability – Conduct thorough testing and optimization. Ensure the site remains stable and the search remains accurate, even when additional archives are added.
  7. Design and Implement Theming Support – Build an engaging, Freifunk-inspired frontend and implement support for customizable themes via configuration files.
  8. Documentation and Deployment – Write comprehensive documentation and deploy the final static site.

Conclusion

I’m genuinely excited to bring this project to life during GSoC 2025. I look forward to sharing my progress and learnings throughout the summer. A heartfelt thank you to Andreas Bräu, who will be mentoring me on this journey—I’m grateful for the support and guidance ahead.