The result of Telescope is thanks to the combined work of all these talented people (and robots).
One of the key features of Seneca's open source involvement has been the emphasis on sharing what we're working on, teaching, and learning through blogging. We believe that one of the most rewarding parts of learning to work in the open source community is discovering that one can become part of the fabric of the web, find a voice, and build a following.
We also believe that reading each other's blog posts is important. In the blog posts of our colleagues, we find that we are not alone in our struggles to make things work, our interests in various topics, and that imposter syndrome isn't something unique to "me."
To better enable the discovery of blogs within our community, we set up an open source blog Planet: an aggregated feed of blog posts from Seneca faculty and students working on open source in a single page. Our blog Planet currently lives at Planet CDOT.
What is a Planet?
Planet is a feed aggregator application designed to collect posts from the weblogs of members of an Internet community and display them on a single page. Planet runs on a web server. It creates pages with entries from the original feeds in chronological order, most recent entries first. --Wikipedia
In the early 2000s, before the rise of social media apps like Twitter and Facebook, Planet solved a important problem in the free and open source community. It used various "feed" technologies (RSS, Atom, CDF) to allow blog posts from different platforms to be aggregated into a single page that was constantly updated with the latest posts by people within a particular community.
Written in Python by Jeff Waugh and Scott James Remnant, Planet could be configured with a list of blog feeds and an HTML template. It would use these to dynamically generate a site with posts in chronological order from the specified feeds.
In Search of a New Planet
Our current Planet is dying. The software we use was last updated 13 years ago. While the underlying code as drifted further into the past, our needs have moved forward. Maintaining the existing system, especially with the number of students involved in open source at Seneca, has become too difficult. Our current site often breaks, and needs manual interventions on a regular basis. Going forward, we need a new planet to call home.
As we get ready to enter the year 2020, we have decided it is time to consider moving to a new system. Unfortunately, almost every system that came to replace Planet has itself become unmaintained.
Rather than try to find an existing solution, we have instead decided to try and create one. Because we need this software, we also feel that we should create and maintain it. And, since our need for a Planet comes out of our collective work on open source, we think that creating it together as open source would be the most desireable path forward.
Trying to Define Our Planet
We have learned a number of things over the past decade running our own planet. We've also watched as social media and modern technologies have reshaped our expectations for what a system like this can and should be. This has gone into our design and implementation of our new Telescope project.
See Architecture for a more complete picture of our current design.
What does Telescope do?
In essence, Telescope takes RSS blog post feeds, rebuilds those blog posts into HTML and collects them in a single web page to display. It is able to handle various formatting, such as code blocks or embedded videos. Telescope also collects data about those posts in the dashboard . Blog posts on Telescope come from contributors to Telescope. Therefore, you get to follow the website"s development on the website itself!
Telescope 1.0 realized many of our initial goals, including:
- A monolithic node.js backend web server providing REST APIs and GraphQL
- A node.js queue service for parallel feed processing
- Complete UI overhaul and design
- A GatsbyJS frontend web app using Material UI React components
- Initial SAML2 based Single Sign On Authentication
- Docker/Docker Compose based container management
- CI/CD pipelines using CircleCI and Travis CI
- Pull Request previews using Zeit Now
- A Redis database for caching feeds and posts
- An Elasticsearch database for full-text search of posts
- An Nginx reverse proxy and HTTP cache server
- Certbot for managing SSL certificates with Let’s Encrypt
- A node.js based GitHub Webhook Service to automatically manage deployments based on
- GitHub push events and webhooks to automate staging and production builds, as well as green/blue deployment
- Staging (https://dev.telescope.cdot.systems/) and production (https://telescope.cdot.systems/) deployments
Telescope 2.0 improved and extended this design:
- Improved testing infrastructure, including snapshot, end-to-end, and unit testing
- Reworking CI/CD to GitHub Actions
- Improved SEO
- Adding Firebase as a back-end data store for User info
- Improvements to the SAML based Authentication, JWT Authorization, and user Sign-up Flows Security
- New UI Design, Logo, CSS, and Theming
- Improved Accessibility and User Experience
- Migration of Monolithic back-end to Microservices (90% complete) and API Gateway using Traefik
- Improvements to Elasticsearch and Redis
- Full port of front-end from GatsbyJS to next.js
- TypeScript rewrite of front-end
- Dependency Updates and Maintenance, both manual and automated (Dependabot)
- Bug fixes and Paying-off Technical Debt
- Progressive Web App (PWA) and Mobile UI Support
- Docker improvements
- Automation and Tooling fixes, updates, and improvements
- Improvements to nginx, caching, and certificate management
- Updates to Documentation
- Improved Developer Experience, including fixes for cross-platform differences