I've been busy this year executing my take on the #100DaysOfCode challenge by rebuilding a set of development skills that I can use to implement products using micro-services. That work has resulted in a rather robust mixed-use sandbox. As part of my effort to build out a comprehensive public documentation portal, over the weekend I set about starting a document to describe my Sandbox's Architecture. Below is the first architecture diagram I've produced, describing from a top level the services which make up my sandbox & how they're zoned or organized:
Using Cloudflare's amazing DNS service, my Sandbox is spread across two domains:
- Knowhere.space: Knowhere is my edge-computing zone, with the DNS routing to a NAS server or Raspberry PIs within my home. I use this zone to serve content primarily within my home, as well as services which are either experimental, or cost-prohibitive in the cloud.
- Mainwaring.dev: Mainwaring.dev encompasses all of my cloud computing services from a variety of different providers, including DigitalOcean, Vercel, Carrd.co and others.
Knowhere.space
- Traefik: Traefik acts as an ingress for my homelab, enabling me to route traffic to the other services I have running on the edge without overly exposing my Firewall with open ports.
- PiHole: PiHole is a DNS Sinkhole I added to reduce the number of ads and trackers served to devices on my local network.
- Plex: Plex is my personal Netflix, serving content I have stored on my local network.
- YAC Reader: Comics are a guilty pleasure of mine, and YAC Reader enables me to serve digital comics to my iPad with ease.
- Transmission: Transmission is a BitTorrent client. The specific implementation of Transmission I use includes OpenVPN, allowing me to securely route that traffic.
- Lighthouse: Spotify's open-source Lighthouse Audit Service integrates my Backstage.io implementation with Google Lighthouse. In a for-profit situation, I would run this service in the cloud, but I'm taking advantage of existing resources I have to run such a minor service.
Mainwaring.dev
- API: A very robust REST server built using the @strapijs. I currently have over 1 million records of personal data stored from more than dozen sources, including third-party services (Twitter, Facebook, Discogs), manual data entry (press releases & news articles, postcards) and Apple's Healthkit (Workouts, Calories Burned, Heart Rate).
- Backstage (server): Backstage is an open-source project from Spotify which enables teams to build developer portals and customize them in a way to aggregate data from all the various tools a team uses.
- Chartbrew (server): Chartbrew is open-source reporting service which really makes it easy to visualize data.
- Backstage (website): The Backstage Frontend is a separate process from the backend, so I opted to host it on Vercel.
- Chartbrew (website): Similar to Backstage, the Chartbrew frontend is a separate process which I host on Vercel.
- Contact: While it's awesome to build cool things, sometimes you just need a simple website tool for static content. Contact is one of these examples. This branded-alternative to LinkTree is used as a digital business card, providing my audience with a list of options to learn about myself and make contact.
- The Legend of Bruce: A marketing website for a social experiment. When I attend music festivals, I typically bring a large inflatable dinosaur (Bruce) to crowd-surf a headlining act, and at the end of the night he always goes home with a random person he found in the crowd. Bruce now includes a QR code linking back to this page, which serves as a Call to Action to share pictures or videos people take with Bruce on Instagram.
- Status Page: Status Pages are a common feature for SaaS products, and BetterUptime made it really easy to implement monitoring over my resources.
- Public Documentation Portal: Gitbook enables me to author public documentation within my Github Project and easily serve it in a presentable way. I use this portal to share documentation for open-source projects I publish, as well as Architecture documents and how-to guides.
Do you have questions or comments about my sandbox so far? Drop them below ⬇️
Top comments (6)
How do you balance experimenting with new stuff vs going deeper on what you already know/use?
Excellent Question, and I have three answers for that:
how do you import apple data into @strapijs ?
This was a little creative on my part, but I found tools to export the data into CSV format, and then wrote a CLI process using grunt.js to load, transform, and upload the records to my Strapi API.
I wrote similar processes in grunt.js for other exports, like my twitter archive
Ah okay. So it’s not an automated flow? I thought you track your apple data every day/week to strapi
Not yet. I’ve thought about building an IOS app to sync the data to my strapi instance, but the Level of Effort is definitely on a different magnitude compared to the current workflow. It’s not real-time right now but the narrative I’m building with my data so far isn’t intended for real-time insights