DEV Community

Cover image for I Built Ghost of a Commit: An AI Ghost That Haunts Your Git Commit Messages 👻
hrishu802
hrishu802

Posted on AI-assisted

I Built Ghost of a Commit: An AI Ghost That Haunts Your Git Commit Messages 👻

Hacktoberfest Open-Source AI Challenge: Ghost in the Machine Submission 👻🌼

This is my submission for the DEV Hacktoberfest 2026 Week 4 Challenge: Ghost in the Machine.

The Idea

We've all written commit messages like:

  • Fixed authentication bug
  • Updated documentation
  • Fixed typo in CSS styling

They're useful, but honestly, they're not particularly exciting.

So, what if an ancient ghost lived inside your repository and transformed ordinary Git commit messages into spooky whispers?

That's how Ghost of a Commit was born.

It's a small AI-powered web application that takes your ordinary Git commit messages and transforms them into mysterious, humorous, Halloween-themed messages while preserving their original technical meaning.

Meet the Ghost

🔮 Live Demo: https://ghost-of-a-commit.vercel.app/

💻 GitHub Repository: https://github.com/hrishu802/Ghost-of-a-Commit

Here's an example:

Original commit:
Fixed authentication bug

The ghost's interpretation:

The veils of the login portal have been torn asunder. The phantom gremlin of session tokens has been banished.

Another example:

Original commit:
Fixed typo in CSS styling

The ghost's interpretation:

The typo in the stylesheet has been exorcised.

Apparently, even CSS bugs have supernatural origins. 😂

How I Built It

I wanted to keep this project intentionally small. No authentication, databases, dashboards, or unnecessary complexity.

The application has a simple workflow:

  1. Enter an ordinary Git commit message.
  2. Click Summon the Ghost.
  3. The message is sent to the backend.
  4. An AI model transforms it into a spooky interpretation.
  5. Copy the generated message or use it directly as a Git commit message.

Tech Stack

  • Frontend: React, Vite, TypeScript and Tailwind CSS.
  • Animations: Framer Motion.
  • AI Model: NVIDIA Nemotron 3.5 Lightning.
  • Inference Provider: OpenRouter.
  • Backend: Vercel Serverless Functions.
  • Deployment: Vercel.

Bringing the Ghost to Life with Open-Weight AI

The most interesting part of this project was integrating an open-weight AI model.

I initially experimented with Google's Gemma 3 12B Instruct through Hugging Face Inference Providers. However, I ran into an inference-credit limitation.

Rather than purchasing credits just for this small project, I migrated the integration to OpenRouter and used:

nvidia/nemotron-3.5-lightning:free

The application communicates with the model through OpenRouter's OpenAI-compatible API.

I also kept the inference logic behind a server-side API endpoint, ensuring that the API key never needs to be exposed in the browser.

Why Open Innovation Matters

For me, the biggest takeaway from this project was flexibility.

Using an open-weight model meant I wasn't tied to a single closed-model ecosystem.

I could experiment with different models, change inference providers, and adapt the system without redesigning the entire application.

It also made experimentation more accessible. I could build something fun and functional without committing to an expensive AI infrastructure setup.

Open innovation isn't just about using open models. It's about having the freedom to experiment, adapt, and build on technology that others can access too.

One important distinction: Ghost of a Commit uses hosted inference rather than running the model locally. The model is open-weight, but inference is provided through OpenRouter.

Where Open Worked Better for Me

The biggest advantage I experienced was freedom of choice.

When my initial Hugging Face inference setup hit a credit limit, I wasn't forced to abandon the project or redesign the application around a single provider. I could switch to OpenRouter and experiment with NVIDIA Nemotron while keeping the same overall application architecture.

That flexibility was valuable for a small independent project like this. I could experiment with different models and providers without committing to one proprietary ecosystem or expensive infrastructure.

There is also an important distinction: I'm using hosted inference, not running Nemotron locally. The model is open-weight, but requests are processed through OpenRouter. So this implementation doesn't provide offline operation or local data privacy. Those would be interesting advantages to explore in a future locally hosted version.

A Little More Than Just a Prompt

I also added a few details to make the experience enjoyable:

  • An animated ghost mascot with different expressions.
  • A terminal-inspired interface.
  • Quick example commit messages.
  • Copy-generated-message functionality.
  • A one-click option to copy the result as a git commit command.
  • Error handling for unavailable models and API failures.

I deliberately avoided adding features that weren't necessary for the core experience.

What's Next?

This was designed as a small weekend project, so I kept the scope limited.

There are plenty of possibilities for future improvements, such as Git integration, additional ghost personalities, and support for more open-weight models.

But for now, the ghost has one job: making boring commit messages a little more interesting.

Final Thoughts

This week's challenge reminded me that a project doesn't always need to solve a massive problem or become a full-fledged product.

Sometimes, building something small, experimenting with open technology, and learning something along the way is enough.

And if your Git history ever feels a little too lifeless, perhaps it's time to summon a ghost. 👻


Built for the DEV Hacktoberfest 2026 Week 4 Challenge: Ghost in the Machine.

Thanks for checking out my project!

Top comments (0)