The early history of the site is documented here. It went through a lot of revisions, and very quickly, in hindsight.

2025-01-24 - Initial Concept[edit]

proto-image1.png
The absolute first screenshot ever taken of this code in action
proto-image2.png
The first implementation of autotagging

Late January, I got tired of searching through Odysee and set up the basic functionality of what would become the GunCAD Index. Its initial working name was "3D2A Index", but that's hard to type and impossible to use as the start to variable names in like every programming language, so it changes later that day (or the next, I can't remember).

The initial prototype was just enough Django to manipulate the database, a basic template page with nothing on it, Django's admin UI, and some commands to ingest data. I started with my personal Odysee subscription list.

This was already a huge improvement over Odysee, even just searching through the admin UI.

2025-02-15 - Building the UI[edit]

0.0.0-image0.png
A very early concept, I hadn't even sorted out styling

Getting Feedback[edit]

I'd finally decided to reach out to other members of the community to look for feedback. Due to his previous forays in setting up torrents for things like the Super Safety, I reached out to Tim Hoffman.

I sent a pretty lengthy email asking what his thoughts were. At the time, the development intent of the Index was significantly different:

  • I wanted MVP to have federation. I wanted other GunCAD groups to host their own instances, then users could spin their own up which consume and aggregate their content. Then other users could consume others' Indices and so on.
  • Torrenting was supposed to be a first-class citizen. This was before I knew much about LBRY

But even then, some design concepts were solid, and I still stand by them today:

  • Open-source first. Transparency is key in this space
  • Odysee stays the source-of-truth. We don't take original content that's not on-chain, we add features that keep metadata on Odysee
  • Control stays in the hands of the authors, no direct downloads
  • First-class API for use in sidecar/downstream containers

Hoffman's very receptive, and would love to see this project built. He makes an offer to platform it whenever it launches, guaranteeing exposure should I see the project through.

0.0.0-image1.png
The first screenshot of the app I'd ever sent. Included in an email to Hoffman, it was never intended to be the final UI, just a slaptogether so I can show off that I have more than vaporware

The initial implementation here used Datatables, and thus jQuery. It would later be discarded.

That day also cemented what would be startlingly close to the final presentation of the logo:

proto-logo.png
Uhh

Of course, the icon would change, but I needed something to put in the circle. For the time being, I chucked a screenshot I took of Brandon's video on the Vintorez.

2025-02-17 - Styling Styling Styling[edit]

At this point, I'd gotten the approval I sought from an established member of the space, which sent motivation way up. I spent the next several days styling the everloving shit out of the website, and establishing the core colors of the site.

Fun fact: the background is #2a2a2a. Felt it was fitting.

2025-02-17-1.png
The header takes its shape here and never changes

2025-02-19 - Homepage Acquired[edit]

On the 19th, I also decided that the site needed a homepage. The very earliest implementation looked like this:

2025-02-19-2.png.png
Ew, so cramped

Because we were still using Datatables, the front page didn't have a search bar. Not being able to implement that feature gnawed at me for a while, but I wasn't ready to tackle that problem yet. That said, I was already sold on the idea that the front page would feature some eye-catching releases. At this time, they were a randomly-chosen one and the latest release.

That was also the day that I decided we'd use Odysee's colors for recognizability:

2025-02-19-1.png
If you're reading this before June, this is a real release. This is actually slated to come out on that date

2025-02-23 - The Site is Recognizable[edit]

2025-02-23.png
The first homepage that looks like what we have today

This is where the first character of the site really starts to take hold. The fundamental layout of the frontpage, at time of writing, has yet to deviate significantly from this format. At this point, I was ready to set the project down for a minute and meditate. I had plans coming up and also had to think about how best to approach the search problem.

The Search Problem[edit]

If you're not familiar, Datatables is not built to do what we do here. It has to ingest the entire dataset at once and then filter through it. There are ways around this -- and I did experiment with using DRF-Datatables at one point -- but they're all ruthlessly inefficient. And it was on this day that I really realized how bad it was.

It took eight seconds for the search page to load. It was criminally unacceptable.

I had to do some research and find a better way.

2025-03-01 - I Find a Better Way to Search[edit]

I sit down, I do some research, and I find what I'm after: PostgreSQL full-text search with websearch syntax. It's exactly what I need, and I'm stoked.

I do more digging. It's a first-class citizen in Django.

I know how the project reaches MVP.

2025-03-01.png
The full-text-search-centric homepage

At this point, I have to dive in and redo a bunch of work. I need a DetailView, I need better templates, and I need to write a lot more Django. I have to figure out what in God's name a fucking text search vector is, how to generate it, and how to index a column of search vectors.

I still don't think I know what all that means, honestly. If you asked me how a vector gets you from a search query to an answer, I'm gonna throw my hands up.

First User Testing[edit]

I take a close friend of mine and have him demo the site later that evening, after I've got some basic templates and stuff working. Indexing isn't implemented yet, but basic functionality is good. He hits a couple HTTP 500s, I fix a couple bugs, and I get some more glowing feedback:

"real fuckin clean, pretty intuitive", "nothing seems more than 1-2 clicks away from where I'd want to be"

Later that night, I finally figure out indexing, and our search returns in <100ms. We're golden -- everything from here is presentation and infrastructure.

2025-03-02 - Site is Up[edit]

If you had to pin a time for when the site's really for real birthday is, it's this day. I registered the name, got all the infra up, and started work on some features that required a live site, mostly making sure TLS was fine and getting OpenGraph cards to work.

No real aesthetic changes were made to it at this time.

2025-03-04 - More Feedback[edit]

The site's up, I feel moderately satisfied with it, and I finally decide it needs to be put in front of someone with experience in this field. My friend might be playing it up, but Hoffman? If he came back and said it was good, then I'd know we were cooking.

I hit him with the site.

screenshot-index-early.png
The screenshot included in the email

"I love it."

He's got a couple problems. The biggest is that there was a bug where I was overwriting the relevance sort with a recency sort, which means search was more of a filter.

Fixing that bug resulted in the "Relevance" sort option that's the default today, as in doing so, I also implemented in algorithm that weighted results based on their LBC, repost count, and more. Without it, we wouldn't be able to find shit.

2025-03-05 - Branding[edit]

screenshot-index.png
The front page of the website, cut down for the README

This day is when I finally buckle down and set up the site icon we use today. Putting that in place, plus putting the scrolling background in, made the site really feel like it was coming together. There weren't any showstopper bugs, and so I arm the release date.

On this day, I also put in some functionality to downsample and cache images for releases, as Odysee's CDN burped that day and made it impossible to load a lot of thumbnails for things.

Oh, and I reach out to Moderator Gage of BLC. I figured if I'm using his team's data to build a cool search engine, he'd want in on it.

03/09.

2025-03-05 - 2025-03-08 - Last-minute changes[edit]

Only a handful of things happened in these last few days, mostly just testing:

  • I overoptimized the shit out of the website, putting proxy caching in place and -- according to jmeter -- allowing for a thousand concurrent users or so. I've backed off on the overoptimization now, but if I ever need to support that many users, I could do so trivially.
  • The "random" release on the frontpage was replaced with a "popular" one based on supported LBC.
  • Monitoring was finalized
  • Ratelimits were put in place on several endpoints
  • I make a hype post on Reddit and get in touch with some more people, who are very interested in helping out, be it with launch day hype or contributions (special thanks to YoungBreezy and Alyosha of 3DPF for being super early adopters)

2025-03-09 - Launch Day[edit]

I wake up early, and I'm anxious. ~8:30AM CT hits and Hoffman makes the post.

It's an immediate, huge hit.

There are no launch day bugs. None. I got to spend the whole day just answering questions and gathering feedback. The server handles the load incredibly well, there are barely any DB hits on account of insane proxy caching.

It just works, and I'm astonished.

Thanks[edit]

I seriously cannot overstate how much I love you guys. Seeing this site take off has been an incredible experience, and I'm glad to finally contribute back to the community in a uniquely useful way.

Here's to years more of GunCAD Index.

This article was last modified: May 1, 2025, 12:50 AM