• Skip to main content

CPlatt Portfolio

Creating a Visually Stunning Web

  • Portfolio
  • Blog

Blog

I Built My Own Version of Git

March 17, 2026 by Chris Platt

For years, I used Git the way most developers do—confident enough to get by, but not confident enough to explain why it works.

I could commit, push, and rebase my way through projects, but Git always felt a little… magical.

So I decided to remove the magic.

I built a simplified version of Git in Python.


The Goal

I didn’t want to rebuild Git completely. That would take months (or years). Instead, I focused on the core idea:

Can I build a system that tracks file history using hashes?

That led to a small CLI tool with just a handful of commands:

tig init
tig add file.txt
tig commit -m "message"
tig log
tig checkout <hash>

Simple on the surface—but surprisingly deep once you start building it.


The Big Idea: Content-Addressable Storage

The first breakthrough came when I stopped thinking in terms of files and started thinking in terms of content.

In a normal filesystem, you store something like:

file.txt

But in Git (and in my version), you store:

<hash> → file contents

Here’s the core function that made everything possible:

def hash_object(data: bytes) -> str:
    return hashlib.sha1(data).hexdigest()

That’s it.

Every file, every commit, every snapshot—everything is identified by its hash.

This leads to a powerful property:

If two files have the same content, they have the same hash.

Which means:

  • No duplication
  • Built-in integrity checking
  • Deterministic state

Storing Files as “Blobs”

When I implemented add, I realized something interesting: Git doesn’t care about filenames at first—it cares about content.

Here’s the simplified version of what happens:

def add(file_path):
    with open(file_path, "rb") as f:
        content = f.read()

    data = b"blob\n" + content
    blob_hash = write_object(data)

A couple subtle but important details here:

  • I prefix the content with "blob\n"
  • The hash is calculated on the entire structure

That means the same content stored as a different type (like a commit) will produce a different hash.

This is how Git avoids collisions between object types.


The Hidden Layer: The Index (Staging Area)

One of the most misunderstood parts of Git is the staging area.

When I built my own version, it finally clicked.

I stored it as a simple JSON file:

{
  "file.txt": "a1b2c3..."
}

Every time you run:

tig add file.txt

You’re not committing—you’re updating this index.

That separation is crucial.

It means:

  • You can stage multiple files
  • You control exactly what goes into a commit
  • Commits become predictable snapshots

Commits Are Just Objects

Before this project, I thought commits were something special.

They’re not.

They’re just structured data.

Here’s what my commit object looks like:

{
  "tree": "abc123",
  "parent": "def456",
  "message": "first commit",
  "timestamp": 1710000000
}

And here’s the key insight:

A commit doesn’t store files—it points to a tree, which points to blobs.

That indirection is what makes Git so powerful.


Rebuilding History

The log command ended up being one of my favorites to implement.

It’s just a loop:

while current:
    commit = read_object(current)
    print(commit["message"])
    current = commit["parent"]

That’s it.

Git history is just a linked list of commits.

No database. No complex indexing.

Just pointers.


The Moment It Clicked

The most satisfying moment came when I implemented checkout.

I took a commit hash, walked to its tree, loaded each blob, and rewrote the files on disk.

And suddenly:

I could travel through time.

Not metaphorically—literally.

I could restore my project to any previous state using nothing but hashes.

That’s when Git stopped feeling like a tool and started feeling like a system.


What I Didn’t Build (and Why It Matters)

My version is intentionally simple. It doesn’t include:

  • Branching
  • Merging
  • Diffs
  • Remote repositories

And that’s important.

Because it highlights something:

The core of Git is surprisingly small.

Everything else—branches, merges, rebases—is built on top of:

  • content-addressable storage
  • immutable objects
  • commit chains

What I Learned

Building this changed how I think about version control.

1. Git is a database, not just a tool

It’s storing objects, not files.

2. Hashing is the foundation

Everything depends on deterministic hashing.

3. Simplicity scales

The core model is simple—but incredibly powerful.


Final Thoughts

I didn’t build a production-ready replacement for Git.

But I built something more valuable:

Understanding.

And now when I run:

git commit

I know exactly what’s happening under the hood.


If You Want to Try This

I highly recommend building your own version.

Start small:

  • Store files as hashes
  • Build a commit object
  • Walk the history

You don’t need thousands of lines of code.

You just need the right mental model.


What’s Next

If I keep going, I want to explore:

  • Branching (just pointers!)
  • Merging (this gets complicated fast)
  • A better CLI experience

But even if I stopped here, this project was worth it.

Because now Git isn’t magic anymore.

It’s just really elegant engineering.

To check out the code you can see the repository on my github https://github.com/plattnotpratt/tig-repo-clone

Filed Under: Development, Programming, Uncategorized

The New Developer Renaissance: How AI Is Changing Software Development (For the Better)

March 14, 2026 by Chris Platt

Not long ago, writing software meant hours of staring at stack traces, typing boilerplate code, and Googling obscure errors at 2 a.m.

Today?

You might simply ask an AI:

“Build me an API that does this… and write the tests.”

Welcome to the age of AI-assisted development—a time when developers are no longer just coders, but architects of ideas.

And the change isn’t theoretical anymore. It’s happening right now.

AI Has Officially Entered the Developer Toolkit

AI in development has moved from novelty to industry standard.

Recent research shows that around 90% of developers now use AI tools in their workflow and many spend roughly two hours a day collaborating with AI systems. 

Even more striking:

  • 92% of developers use AI tools somewhere in their workflow
  • 51% use them daily
  • ~41% of code in real workflows is AI-generated  

But here’s the important part:

AI is not replacing developers.

It’s supercharging them.

From Autocomplete to Autonomous Engineers

The first generation of coding AI was simple:

  • autocomplete suggestions
  • documentation help
  • syntax corrections

Now we’re entering the era of agentic development.

Modern AI coding tools can:

  • read an entire codebase
  • plan implementation steps
  • modify multiple files
  • run commands
  • open pull requests automatically  

In other words:

AI has evolved from “pair programmer” to junior teammate.

Some tools are even pushing beyond that.

The Rise of AI Coding Agents

Today’s development environment includes an entire ecosystem of AI tools:

Examples include:

  • GitHub Copilot
  • Cursor IDE
  • Claude Code
  • Amazon Q Developer
  • Google Gemini Code Assist
  • Replit Agents

These tools can:

  • generate full applications
  • refactor legacy systems
  • create tests automatically
  • debug issues
  • manage CI/CD pipelines  

Companies are rapidly adopting them because the gains are real.

At Nvidia, for example, AI coding tools helped engineers produce three times more code than before, while maintaining stable bug rates. 

That’s not just productivity.

That’s a transformation of how software is built.

Developers Are Becoming Idea Multipliers

Historically, building software required:

  1. Idea
  2. Design
  3. Weeks of coding

Now?

AI collapses the timeline.

A single developer can:

  • prototype a product in hours
  • test an idea the same day
  • iterate instantly

This has created a new culture called “vibe coding.”

Instead of manually writing every line, developers guide the AI:

“Make it faster.”

“Add OAuth.”

“Rewrite this in Rust.”

And the system responds.

AI Is Also Democratizing Development

Perhaps the most exciting change isn’t speed.

It’s access.

AI tools allow:

  • designers to prototype apps
  • founders to build MVPs
  • students to learn programming faster
  • non-developers to automate workflows

Some AI platforms can even generate entire web apps from prompts.

This means the next generation of software might not come from giant teams.

It might come from one curious person and a clever AI assistant.

The New Developer Workflow

A modern developer’s day increasingly looks like this:

  1. Describe the feature in plain English
  2. Let AI generate a draft implementation
  3. Review and refine
  4. Ask AI to write tests
  5. Run automated debugging
  6. Ship

AI handles the repetitive tasks.

Developers handle the thinking.

That shift is profound.

But It’s Not Magic (Yet)

Let’s be honest: AI is powerful, but imperfect.

Studies show developers still review most AI-generated code because accuracy and reliability vary. 

Only about 30% of AI-generated suggestions are accepted directly in some workflows. 

Which is actually a good thing.

It means the real future isn’t:

AI vs developers

It’s:

AI + developers

The Future: AI-Native Development

The next wave is already forming.

New tools are introducing agent-first development environments, where multiple AI agents collaborate on coding tasks simultaneously. 

Imagine:

  • one AI writing backend logic
  • another designing the UI
  • a third testing performance
  • a fourth managing deployment

While the developer acts as creative director.

Software development is becoming less about typing syntax and more about orchestrating intelligence.

The Real Transformation

The biggest shift isn’t technical.

It’s philosophical.

For decades, programming was about writing instructions for machines.

Now it’s about collaborating with them.

AI removes the friction between imagination and execution.

That means:

  • more experimentation
  • faster innovation
  • smaller teams building bigger products

And possibly a golden age for builders.

Final Thought

The world often frames AI as a threat to developers.

But history shows something different.

Every major tool—from compilers to frameworks—once raised the same fear.

Instead of replacing developers, those tools made them more powerful.

AI is simply the next step.

Not the end of programming.

But the beginning of a new creative era in software development.

If you want, I can also help you turn this into:

  • a more opinionated viral blog version,
  • a Medium-style storytelling article, or
  • a technical deep-dive version developers will love. 🚀

Filed Under: AI, Development, Programming

10 Software Ideas to Kickstart Your Programming Journey

June 9, 2024 by Chris Platt

Embarking on the journey of software development is both exciting and daunting. Whether you’re a beginner looking to dip your toes into coding or an experienced programmer seeking new challenges, there’s always room for innovative software ideas. In this blog, we’ll explore ten project ideas that cater to programmers at different skill levels, from novices to seasoned developers.

Project Ideas for Beginners:

  1. To-Do List Application: Create a simple to-do list app that allows users to add, edit, and delete tasks. This project helps beginners understand basic CRUD (Create, Read, Update, Delete) operations.
  2. Calculator: Build a basic calculator application that performs arithmetic operations like addition, subtraction, multiplication, and division. This project introduces fundamental concepts of user input and output.
  3. Weather App: Develop a weather application that fetches weather data from an API and displays it to the user. This project teaches beginners how to work with APIs and handle JSON data.

Project Ideas for Intermediate Programmers:

  1. Blog/CMS (Content Management System): Create a simple blogging platform where users can write, edit, and publish articles. This project involves database management, user authentication, and CRUD operations.
  2. E-commerce Website: Build an online store with features like product listings, shopping carts, and checkout processes. This project delves into more complex web development concepts like session management and payment gateways.
  3. Chat Application: Develop a real-time chat application that allows users to communicate with each other. This project introduces concepts like WebSockets and event-driven programming.

Project Ideas for Advanced Programmers:

  1. Machine Learning Model Deployment: Build a web application that utilizes a machine learning model for tasks like image recognition or sentiment analysis. This project involves integrating machine learning algorithms with web frameworks like Flask or Django.
  2. Blockchain-Based Application: Create a decentralized application (DApp) using blockchain technology. This project explores concepts like smart contracts, distributed ledgers, and cryptographic hashing.
  3. Operating System Kernel: Develop a basic operating system kernel with functionalities like process management, memory allocation, and file systems. This project requires a deep understanding of computer architecture and systems programming.
  4. Game Development: Create a multiplayer game using a game engine like Unity or Unreal Engine. This project encompasses various aspects of game development, including graphics rendering, physics simulation, and network programming.

Embarking on software projects is an excellent way to hone your programming skills and explore new technologies. Whether you’re a beginner, intermediate, or advanced programmer, there’s a project idea suited to your level of expertise. Start small, gradually increase the complexity of your projects, and most importantly, enjoy the learning journey!

Filed Under: Database Design, Development, Programming

The Latest Design Trends in Web Design: Minimalism, Flat Design, and Dark Mode

March 28, 2023 by Chris Platt

Web design trends are constantly evolving, and it can be challenging to keep up with the latest styles and techniques. In this blog post, we’ll explore some of the latest design trends in web design, including minimalism, flat design, and dark mode. We’ll also share some examples of websites that are using these trends effectively.

Minimalism

Minimalism has been a popular trend in web design for several years now, and it shows no signs of slowing down. Minimalist websites are characterized by clean lines, ample white space, and a focus on typography. This trend emphasizes simplicity and clarity, and it’s an excellent choice for businesses that want to convey a sense of professionalism and sophistication.

One excellent example of a minimalist website is Dropbox. The Dropbox homepage features a simple layout with a bold heading and a call to action button. The website’s white background and clean typography create a sense of elegance and professionalism, while the use of subtle animations adds a touch of playfulness.

Flat Design

Flat design is another popular trend in web design that emphasizes simplicity and minimalism. Flat design is characterized by a lack of shadows, gradients, and other 3D effects. Instead, flat design relies on clean lines, bright colors, and simple shapes to create a modern and sleek look.

An excellent example of a website that uses flat design effectively is Stripe. The Stripe homepage features a clean and simple layout with bold headings, simple icons, and bright colors. The use of flat design creates a sense of modernity and innovation, which is perfect for a company that provides online payment services.

Dark Mode

Dark mode is a relatively new trend in web design that has been growing in popularity in recent years. Dark mode is characterized by a black or dark background with light-colored text and graphics. This trend is ideal for websites that want to create a sense of drama and elegance, and it’s an excellent choice for websites that cater to creative or tech-savvy audiences.

One excellent example of a website that uses dark mode effectively is Apple’s website. Apple’s website features a dark background with light-colored text and graphics, which creates a sense of drama and sophistication. The use of dark mode is particularly effective for showcasing Apple’s products, which are known for their sleek and modern design.

Minimalism, flat design, and dark mode are just a few of the latest trends in web design. Each of these trends emphasizes simplicity, clarity, and modernity, making them an excellent choice for businesses that want to create a sense of professionalism and sophistication. By incorporating these trends into your website design, you can create a modern and sleek look that will impress your visitors and help your business stand out online.

Filed Under: Design, Web

The Importance of Responsive Design: Why Your Website Needs to Look Great on All Devices

March 27, 2023 by Chris Platt


In today’s digital age, more and more people are accessing the internet on mobile devices like smartphones and tablets. In fact, mobile devices now account for more than half of all internet traffic worldwide. With this in mind, it’s essential to have a website that looks great and functions well on all screen sizes. This is where responsive design comes in.

What is Responsive Design?

Responsive design is a web design approach that allows a website to adapt to different screen sizes and devices. With responsive design, a website’s layout and content will adjust to fit the screen size of the device being used, whether it’s a desktop computer, a tablet, or a smartphone. This ensures that the website is easy to navigate and read, regardless of the device being used.

Benefits of Responsive Design

There are many benefits to using responsive design for your website. Here are just a few:

  1. Improved User Experience

Responsive design ensures that your website is easy to use and navigate on all devices, which leads to a better user experience. Visitors to your website will appreciate being able to access your content easily, no matter what device they are using.

  1. Increased Mobile Traffic

With more and more people accessing the internet on mobile devices, having a website that looks great on smartphones and tablets is essential. Responsive design ensures that your website is accessible to all visitors, regardless of the device they are using. This can help to increase mobile traffic to your site and boost engagement.

  1. Better Search Engine Rankings

Search engines like Google prioritize mobile-friendly websites in their search results. By using responsive design, you can improve your website’s mobile-friendliness and boost your search engine rankings.

Tips for Implementing Responsive Design

Implementing responsive design for your website may seem daunting, but there are a few tips that can make the process easier:

  1. Use a Responsive Design Framework

There are many responsive design frameworks available, such as Bootstrap and Foundation, that can help you create a responsive website quickly and easily. These frameworks provide pre-built templates and CSS styles that you can use to create a website that looks great on all devices.

  1. Optimize Images for Mobile

Large images can slow down your website’s load time on mobile devices. Make sure to optimize images for mobile devices by using compressed file formats and smaller image sizes.

  1. Test Your Website on Multiple Devices

It’s important to test your website on multiple devices to ensure that it looks and functions as intended. This can help you identify any issues with your website’s layout or functionality on specific devices.

Responsive design is essential for any website that wants to provide a great user experience across all devices. By implementing responsive design and optimizing your website for mobile, you can improve engagement, increase traffic, and boost your search engine rankings.

Filed Under: Design, Development, Web

Show Me The Code!!!

March 17, 2023 by Chris Platt

In the world of software development, two methodologies that have gained immense popularity in recent times are Scrum and Agile. They have revolutionized the way teams approach software design, development, and delivery. In this blog post, we will delve deeper into these methodologies, understand their differences and how they complement each other.

What is Agile?

Agile is a project management methodology that emphasizes on iterative, incremental and collaborative approach. It is based on the Agile Manifesto, which values “individuals and interactions, working software, customer collaboration, and responding to change.” Agile methodologies help teams to deliver high-quality software quickly and frequently, adapt to changes and prioritize customer satisfaction.

What is Scrum?

Scrum is an agile methodology that is a framework for managing and completing complex projects. Scrum emphasizes on a self-organizing team, continuous improvement, and delivering working software in short sprints. It is based on three primary roles – Product Owner, Scrum Master, and Development Team. Scrum is widely used for software development, and it helps teams to reduce project risk, increase collaboration, and deliver software quickly.

How Agile and Scrum are related?

Agile is a broad methodology, and Scrum is a framework that helps teams to implement agile methodologies effectively. Scrum is a subset of Agile that provides specific guidelines on how to manage projects, develop software, and work collaboratively. Scrum emphasizes on transparency, inspection, and adaptation, which are essential principles of agile methodologies.

Agile vs. Scrum

Agile and Scrum are not interchangeable terms. Agile is a methodology, while Scrum is a framework that provides specific guidelines on how to implement Agile methodologies effectively. Agile can be applied to various projects, while Scrum is primarily used for software development.

Agile emphasizes on iterative, incremental, and collaborative approach, while Scrum emphasizes on a self-organizing team, continuous improvement, and delivering working software in short sprints.

Key benefits of Agile and Scrum

Agile and Scrum provide numerous benefits to teams and organizations, including:

  1. Faster time-to-market: Agile and Scrum methodologies enable teams to deliver working software quickly and frequently.
  2. Improved collaboration: Agile and Scrum methodologies promote teamwork, transparency, and communication, leading to better collaboration between team members.
  3. Adaptability: Agile and Scrum methodologies enable teams to respond quickly to changing market demands and customer requirements.
  4. Continuous improvement: Agile and Scrum methodologies promote continuous learning and improvement, leading to better outcomes and increased customer satisfaction.
  5. Reduced project risk: Agile and Scrum methodologies help teams to identify potential risks early and mitigate them before they become bigger issues.

Conclusion

Agile and Scrum methodologies have transformed the software development industry, enabling teams to deliver high-quality software quickly and frequently, adapt to changes, prioritize customer satisfaction and collaborate better. Agile is a methodology, while Scrum is a framework that helps teams to implement Agile methodologies effectively. Both methodologies provide numerous benefits, including faster time-to-market, improved collaboration, adaptability, continuous improvement, and reduced project risk.

Filed Under: Development, Programming

What is 1st Normal Form (1NF) in Database Design?

March 16, 2023 by Chris Platt

The first normal form (1NF) is the initial step in the normalization process of database design. The purpose of 1NF is to ensure that a database table has a single value for each attribute, and that each attribute is atomic, meaning it cannot be further divided into smaller pieces of data.

In other words, a table is in 1NF if:

  1. All attributes contain only atomic values.
  2. Each attribute has a unique name.
  3. Each record in the table is unique and identified by a primary key.

To understand this better, let’s look at some examples.

Example 1

Suppose we have a table called “Customers” with the following columns: Customer ID, Name, Phone Numbers. In this table, the Phone Numbers column contains multiple phone numbers separated by commas.

Customer IDNamePhone Numbers
1John Doe555-1234,555-5678
2Jane Doe555-9876,555-4321

This table is not in 1NF because the Phone Numbers column violates the atomicity rule. Instead of a single value for each phone number, there are multiple phone numbers separated by commas. To bring this table into 1NF, we need to split the Phone Numbers column into separate columns, each containing a single phone number.

Customer IDNamePhone Number 1Phone Number 2
1John Doe555-1234555-5678
2Jane Doe555-9876555-4321

Example 2

Suppose we have a table called “Orders” with the following columns: Order ID, Order Date, Customer Name, Item Name, Quantity. In this table, the Customer Name and Item Name columns contain multiple values for each attribute.

Order IDOrder DateCustomer NameItem NameQuantity
12022-01-01John Doe, Jane DoeBook, CD1, 2
22022-01-02Jane Doe, Bob SmithDVD, Book1, 3

This table is also not in 1NF because the Customer Name and Item Name columns contain multiple values separated by commas. To bring this table into 1NF, we need to split these columns into separate tables and use a foreign key to link them to the Orders table.

Order IDOrder DateCustomer IDItem IDQuantity
12022-01-01111
12022-01-01222
22022-01-02231
22022-01-02313
Customer IDName
1John Doe
2Jane Doe
3Bob Smith
Item IDItem Name
1Book
2CD
3DVD

By splitting the Customers and Items columns into separate tables, we have eliminated the multiple values problem and ensured that each attribute contains only atomic values. We can now link the Customers and Items tables to the Orders table using foreign keys.

1NF is the first step in the normalization process of database design. It ensures that a table has a single value for each attribute and that each attribute is atomic. By bringing a table into 1NF, we can avoid data redundancy and improve data integrity.

Filed Under: Database Design, Development, Programming, Web

The Path of a Web Developer

March 10, 2023 by Chris Platt

In recent years, the field of web development has been fast evolving. Web developers use a variety of tools and technologies to create and maintain websites and web applications. A web developer’s path entails continuous learning, issue solving, and remaining current with the newest trends and best practices.

In this blog post, we will look at a web developer’s journey and the abilities they need to build to be successful in this area.

Understanding the Basics

The first stage in a web developer’s path is to master the foundations of web development. This includes studying the building blocks of any website, such as HTML, CSS, and JavaScript. A web developer should also be familiar with text editors, which are software applications that are used to create and edit code.

Understanding the Internet

Understanding the web and its architecture is fundamental for becoming a great web developer. This include studying HTTP, URLs, web servers, and web browsers. TCP/IP, DNS, and SSL are all web technologies that a web developer should be aware with.

Choose a Specialty

Web development is a large field with numerous specializations from which a web developer can pick. Front-end development, back-end development, full-stack development, and mobile app development are some of the most prominent specializations. A web developer should specialize based on their interests and career objectives.

Understanding a Programming Language

A web developer should also be familiar with programming languages like PHP, Ruby, or Python. Each programming language has advantages and disadvantages, and a web developer should select a language based on the needs of the project.

Libraries and Frameworks

Frameworks and libraries are vital tools for web developers to use in order to accelerate the development process. Popular frameworks and libraries for web development include React, Angular, Vue, and jQuery.

Version Control

The process of managing changes to code over time is known as version control. A web developer should understand how to use a version control system, such as Git, to manage code changes, interact with other developers, and roll back changes as needed.

Continuous Education

Web development is an ever-changing subject, and a web developer should be committed to lifelong learning. They should read blogs, attend conferences, and participate in online forums to remain current on the newest trends, technology, and best practices.

To summarize, a web developer’s path entails continuous learning, problem-solving, and remaining current with the latest trends and best practices. 

A web developer can build a successful career in this fascinating and dynamic profession by studying the principles of web development, selecting a specialization, learning a programming language, employing frameworks and libraries, mastering version control, and committing to continual learning.

Filed Under: Development, Javascript, Programming, Web

  • Page 1
  • Page 2
  • Page 3
  • Go to Next Page »

CPlattDesign © 2012–2026