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