DEV Community

Cover image for Describing My Sandbox
Joe Mainwaring
Joe Mainwaring

Posted on

Describing My Sandbox

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:

Image description

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)

Collapse
 
ben profile image
Ben Halpern •

How do you balance experimenting with new stuff vs going deeper on what you already know/use?

Collapse
 
theaccordance profile image
Joe Mainwaring • • Edited

Excellent Question, and I have three answers for that:

  1. Medication (ADHD 😅)
  2. My day job influences the direction of some of my sandboxing. My sandbox includes a public status page because I took on the initiative for WorkTango, and it was trivial to repeat the exercise twice. Backstage is another example of this - and a way I can showcase Backstage w/o worry of exposing proprietary information.
  3. Reflecting on my long-term engineering habits, I find my best work is done in spurts. I hit one milestone, pivot to a new topic to consume something fresh, and at a later point I revisit that project and execute on the next milestone. Github Projects is really helping out with building a backlog to revisit and being able to scope a milestone's worth of work.
Collapse
 
denismtfl profile image
Denis •

how do you import apple data into @strapijs ?

Collapse
 
theaccordance profile image
Joe Mainwaring •

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

Collapse
 
denismtfl profile image
Denis •

Ah okay. So it’s not an automated flow? I thought you track your apple data every day/week to strapi

Thread Thread
 
theaccordance profile image
Joe Mainwaring •

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