Time Badger Energy

Sometimes the problem isn’t complexity.

It’s friction.

Recently, I found myself navigating a timesheet process that felt… increasingly manual. First it was images. Then PDFs only. Then pay periods. Then half-hour increments. Then “only include entries for that period.”

All perfectly reasonable requirements.

None of them clearly communicated at the start.

Each submission revealed one more rule.

And each new rule meant adjusting how I tracked time.

So instead of continuing the ritual of:

  • Fill out sheet
  • Take photo
  • Wait for Dropbox scan
  • Export to PDF
  • Attach to email
  • Double-check I didn’t include the wrong period

I did what I usually do when a process starts to feel heavier than it should.

I built a tool.

The Goal: Simple. Not Enterprise.

I didn’t want payroll software.

I didn’t want accounts, subscriptions, dashboards, analytics, or integrations.

I wanted:

  • Date
  • Time in
  • Time out
  • Breaks (in 0.5 increments)
  • Automatic total hours
  • Notes
  • A defined pay period
  • A clean printable version

That’s it.

So I built a small web app that runs entirely in the browser and stores everything in local storage.

No backend.
No database.
No hosting required.

Just open the page and it works.

Time Sheets
Time Sheet

A Memory From digitalNATION

This whole thing reminded me of when I worked at digitalNATION.

They had their own in-house timekeeping system.

It was called Time Badger — because everyone was always being badgered to enter their time.

It wasn’t flashy.

On the left was a list of projects.

Across the top were the days of the current pay period.

You’d find your project, drop in the number of hours for each day, hit save, and move on.

That was it.

No dashboards.
No analytics.
No productivity scoring.
No gamification.

Just:

  • Project
  • Day
  • Hours

It worked.

This Little Tool Feels Similar

What I built this week feels like that.

Not much in the way of bells and whistles.

Just:

  • A defined pay period
  • Entries scoped strictly to that period
  • Automatic hour calculations
  • Enforced half-hour increments
  • A clean white-paper print layout
  • Export and import as JSON
  • The ability to draft an email or share the data
  • Hooks to later sync with a web server

It doesn’t try to be payroll software.

It doesn’t try to be project management.

It just reduces friction in a process that was starting to feel unnecessarily manual.

And like Time Badger, that’s enough.

Vibe Coding

I kept it simple using AI to write most of the code and help shape the structure — what some people call “vibe coding.”

I described what I needed.

It generated a starting point.

I adjusted it.

We iterated.

In about an hour, I had something functional.

Something that might have taken me a day to build cleanly from scratch.

Not because I couldn’t write it.

But because AI accelerates the scaffolding:

  • Routing logic
  • Local storage structure
  • Print styles
  • JSON import/export
  • Edge-case cleanup

Instead of typing boilerplate, I focused on intent.

Instead of wiring everything manually, I refined behavior.

That’s a powerful shift.

No Frameworks. Just The Web.

One of the deliberate choices I made was to keep the technology simple.

No Node.

No React.

No build tools.

No dependencies.

Just:

  • HTML
  • CSS
  • Vanilla JavaScript
  • Local storage

It’s a single-page web app, but in the most literal sense: one page, a little routing logic, and the browser doing what browsers already know how to do.

There’s something refreshing about that.

No compilation step.
No package installs.
No version mismatches.

Just open the file and it runs.

For a tool like this, that simplicity is a feature — not a limitation.

Why Local Storage?

Because this wasn’t about infrastructure.

It was about clarity.

Local storage means:

  • No authentication
  • No server configuration
  • No worrying about uptime
  • No schema migrations
  • No dependency on anyone else

The data lives in the browser.

If I want portability, I export JSON.
If I want backup, I export JSON.
If I want to merge data from another device, I import JSON.

And if I ever want full sync across devices, the structure is already there to plug into a backend later.

The tool is intentionally small.

That’s the strength.

Settings

The Real Lesson

The interesting part isn’t the code.

It’s how often process complexity creeps in simply because nobody writes down the rules.

  • “Only half-hour increments.”
  • “Only entries for that pay period.”
  • “PDF only.”
  • “Submit per pay cycle.”

All reasonable.

But when those rules surface gradually, the process feels chaotic.

Building the tool didn’t just save time.

It clarified the system.

Now:

  • Each pay period is its own sheet.
  • Each sheet prints cleanly.
  • Nothing leaks into the wrong cycle.
  • Submissions are predictable.

The system now matches the expectation.

Print Dialog

Built in an Hour. Used Every Pay Period.

This wasn’t a startup.

It wasn’t SaaS.

It wasn’t a side hustle.

It was a friction reducer.

A small, focused utility built in about an hour with AI assistance and iterative refinement.

And honestly?

That’s the best kind of software.

The kind that doesn’t try to impress.

The kind that simply works.

Try It / View The Code

Want to test it out?

It saves data in your browser’s local storage, so it’s quick to try — but if you clear your browser cache, your entries will disappear unless you export them.

Discover more from Lewis Moten

Subscribe now to keep reading and get access to the full archive.

Continue reading