POC Rules

  • snake_case: Function, Database, Table names
    After carefully playing around with camelCase, kebab-case, and snake_case, I have decided that PHP/JavaScript functions, Databases, and Database tables will be **snake_case**

    I am personally a fan kebob-case but it doesn’t work for all of the following: PHP/JavaScript functions, Databases, and Database. Sometimes I write camelCase things but personally, I find it takes slightly more effort to read/understand.

  • kebob-case: CSS Class names, URLs, HTML attributes
    I have decided that CSS classes will be **kebob-case**. This is mostly just personal preference. I dislike camelCase for CSS and (maybe out of habit?) dislike snake_case for CSS.

  • indenting will be 2 spaces

  • uppercase characters will only be use for things outside of this system’s control




  • Minor – Rewrite core.js getBreakpoint function
  • Minor – Modify Gulp process for Dev env CSS (to not show comments) – if possible
  • Medium – Remove jQuery from Core JS


  • Add SourceMaps


  • PubSub
  • Load JS Dynamically
  • Helper Pages / Tools
    • Full URL Sitemap w/ French counterpart
    • Most frequently used classes (total)
    • Page for all classes inside database (for tree shaking)
    • Analytics – What component is used most (counter)
    • What component is used where
    • Background image viewport checker
    • Page for Databases
    • AB Testing
  • JavaScript Bookmarklet checker
    • Check Analytics is there
    • Check no duplicate IDs
    • Check HTML validity (UL/LI)
    • Heading checker
    • Check HTML validity
    • Validation checks for “Free content” spots
    • Word to code converter


Necessity is the mother of invention

Heard this when wife was watching Little Women. Thought it was a very interesting proverb that related directly to this project.

This tool that I’m “Inventing” ultimately solves the following needs:

  • A git-based system version control system separate from code.
  • A way to build/edit/deploy web pages via a GUI.



This is a living document post on what I’ve done for this project. It’s to keep track of the Journey.

  • Set up Git Repo
  • Added Empty Folder
  • Created Python file
  • Installed Python
  • Installed Postgres
  • Created simple http server via python -m http.server
  • Picked Jinja2 over Mako
  • Picked Flask over Django
  • *DOH* – Abandoned Python, Postgres, and Flask for the purposes of the POC. Going with PHP, mySQL for now….

    Going with a straight POC/MVP approach – that is, to rapid prototype this solution to see if it could work. No version control. No build. Just code and database. Right into the production server 😀
  • 2020 01 10: Pitched my idea to my team. Not sure if I want to proceed with the pitch given that it might not be possible.
  • 2020 01 12: Set up Core JS file (copied from Maverick) but reorganized to be cleaner
  • 2020 01 13: Set up Core CSS file (copied from Maverick) but reorganized/rewrote methodology to be cleaner/more understandable
  • 2020 01 13: Rewrote Height Equalize component from jQuery to ES6
  • 2020 01 22: Investigating new classes added to Maverick but it’s too messy/difficult. Will use Maverick “As is” – rebranded to Chill Penguin.
  • 2020 01 31: I still tried updating Chill Penguin a bit to update it but it’s still difficult. I give up for now.

    I hit a major milestone today – the ability to recursively navigate through an array and output the proper code.

    This is a fundamental milestone and the key piece for everything that comes after it. I’m a bit worried about buffer size – but I guess I’ll cross that bridge when I cross it. Scalability is Future Warren’s problem.

    Edit 2020 02 02: I checked buffer size and it’s fine – I can have some decently large files go through the buffer without worry. My concern now is time delay due to recursive SQL calls. I’ll have to check that out later when I have some more complex components. Putting components in components can cause an infinite loop though, which I’ve done.
  • 2020 02 02: At this time, I feel like I’ve spent:
    • 8 hours reading about Python and Flask – which weren’t too useful
    • 3 hours playing around with CSS to see if my idea for Chill Penguin would work
    • 6 hours improving Chill Penguin CSS
    • 3 hours improving Chill Penguin core.js
    • 16 hours doing PHP / mySQL work
    • 50 to 100 to ?? hours THINKING


What if everything I knew was wrong?

After a number of project redesigns throughout the years, redesigning three 20+ page sites, I started coming up with a different way to do CSS. BEM, ITCSS, OOCSS – they weren’t working for me or my team.

It started with the issue that headings were designed certain ways but tying the look of these headings to designs AND making them semantic and accessible HTML across the entire page was problematic. Design wise, the page would look fine, but the page heading order would be something like: h2, h1, h2, h4, h4, h3 – you get the idea. So the idea was to decouple styles from semantics. Specifically, look and feel should not be tied to any DOM element selectors.

Combining some things I learned from Foundation, Bootstrap, and Flexbox, I created a utility-based CSS system. I called it Maverick.

I used it for more projects and was convinced it was the future of CSS. It was great! I pitched the idea to my team – it was a difficult sell because it went directly against how we’re taught to do CSS. But they were open to the idea and adopted it as part of their codebase. I think it’s been working out well and I see very few drawbacks using it. I still think it’s the future of CSS.

This is not part of the story but related – after doing more research, I found out someone else, Adam Wathan, had already created a CSS methodology and system similar to Maverick, called TailwindCSS. While I don’t agree with everything in TailwindCSS, it’s identical in theory and about 90% the same. If you’re looking to try this CSS technique, give TailwindCSS a try.

Anyway, the point of this story was that I had to challenge what I knew and what I was taught regarding CSS. I had to have the confidence to do something I felt was right, despite being against everything I was taught and what my team believed in. This project, Zero System, will be an extension of this confidence and direction. Challenging what I knew or thought I knew. Doing some things that, I already know, will be unpopular decisions.

On the plus side, I’m re-evaluating things that I always wanted to know about and/or going back to things that I found difficult. I’m specifically learning more about performance and I hope to learn more about Design Patterns, APIs, HATEOAS, Python, and Postgres.

On the negative side, it’s taking me quite a while to get started on this project. I have the idea in my head but executing it and using new technologies, has become a bit of a blocker and a burden. Still, I hope to come out wiser after all this and in the end, isn’t that what it’s all about?


Hello World!

This blog will keep track of my thoughts and musings as I work through a new project, dubbed Zero System.