Skip to main content

Feed

Here you'll find an ongoing feed of everything pertaining to SaberComp. New resources, competition announcements, winners, and more! Subscribe via RSS for automatic updates.

Back in February, I wrote about the playlist checker tool I had built with Claude that helped us monitor YouTube links in our Notion database. In that, I referenced the elusive "Official Archive" that we've mentioned over the years.

Freaking years. That's what it's been. I've rather consistently pushed this project over the horizon, constantly thinking if I just learn a bit more about Python, a bit more about Django, and submit myself to a bit more web development Tutorial Hell™, I'll eventually be ready to embark on the Official LCC | SaberComp Archive 9000™. Oh and in the meantime I must surely prototype everything possible in Notion.

Well after finally finishing my project of rebuilding my personal site from scratch on Astro, I thought about my next Claude-Code-assisted project. Regarding the Tutorial Hell™, I had previously been working my way through Writing [My] First App with Django, the Python web framework I've long had selected for the SaberComp Archive project. But with the general goings-on of life, said Tutorial Hell fell by the wayside. And one of my Claude testbed projects was having it look at that codebase and remind me where the hell I had left off.

"You were trying to figure out URL mappings with folders."

So instead of once again embarking on figuring out how to code things one line at a time, I decided in the interest of actually shipping things, I would trust Claude enough to do the legwork for me. This would instead be a directing job for me, something I could even let churn while I tended to actual work work.

So a couple weekends ago, I created a rather large prompt, along with a handful of links to various web sources for Claude to follow, and my ideas of how I envisioned this whole archive to work—essentially an IMDb for SaberComp.

Within 20-30 minutes, it had a very basic thing up and running.

"I know nothing."

Freaking thing scraped two* web sources of entries, had some preliminary styling for the front end (and I mean preliminary; basically just confirming stuff can be published on the front end at all), and had some basic back-end admin control panel stuff. That's actually a cool attribute of Django—you get admin dashboards for damn-near free.

Feeding the Database

This was a cool part that I had long pondered and Claude just... did it. The entirety of LCC | SaberComp is scattered across the internet in various forms. The original Unofficial LCC Archive on PhiSpace. The Notion database I've been filling out, and the YouTube Playlists Christopher Spenceley has been building in recent years. All of these became insanely useful.

And Claude made them useful by building custom importers for each. This was something I knew would need to be done, and I knew I'd be able to learn it eventually through the various Python books and training sources I had... It's basic web scraping. But we're in the age of AI coding, so let's just freaking do this shit and be done with it.

*I mentioned two sources above, but then listed three. I would be remiss if I didn't mention how part-way through all this, Claude noticed that we seemed to be missing a lot of entries, at which point I fed it the YouTube playlists. Not only did it go "ooo, more data!", but it was able to notice overlap, notice naming conventions ("LCC III Entry 01 - The River"), and prepare the importer to not duplicate existing entries, and note what was a title vs entry number, as early LCC did.

Tables. Tables Everywhere

Something that happened early on that ended up being a huge blessing later is that I took great pains in explaining minute ways I envisioned the archive to function from a user standpoint. This in turn made Claude suggest certain database structures... which in turn made things more complex, but more flexible down the line.

We have about 22 tables within the database, things like Video, Person, Credit, Film, Entry, Channel, Role, Accolade, Submission, etc, et-cet-freakin-a. It sounds insane. But time and time again, as I've asked Claude about building out some new complexity, it's come back with "yeah that's totally possible, because we built it this way."

"Boy do I [love] being right every time."

Reusing Tools

Having had other Claude Code sessions build out Python tools to do other things, I pointed Claude at that directory for reference. I don't think I've shared it here on the blog but we have a particularly slick one that looks at the raw credits text field that we ask for in the submission form, sends that out to the Claude API, returns it as JSON data, and plugs it back into the Notion database.

Welp, we also now have that tool built right into the Django archive. Raw credits, either imported from Notion or plugged in by us (or the future submission form), can be parsed by the Claude API and immediately create people in the database, match to existing people, and match to the closest existing film role. Freaking nifty, as the kids say.

There are a metric buttload more cool things happening under the hood. We'll talk about that eventually.

Keeping Humans in the Loop

One of the most important things about this whole archive effort is accuracy. Constantly along the development effort with Claude, the human factor has been stressed. Whenever something can possibly be figured out with the Claude API, or a Python tool, the final approval step is human-driven. While we might scan your credits with Claude, or scrape it from the internet, nothing ends up on the front end of the archive site without human approval.

A lot of the directing process on my part has been deciding how we classify something that comes from one source, how we classify it when it's AI-created, and how we indicate something is good to go. Then how do those various statuses get displayed, or not displayed, or not displayed and reported... on the front end.

We have work to do.

All this to say... despite Claude Code doing a tremendous amount of coding work on this, I still have a very deep hand in guiding its development. There are extensive decision-making processes along the way... even simple things like "how does the 'person duplicate' scanning tool scale over time?"

I'm not sure "vibe coding" really covers this.

One of the most intense things that has happened across this development process, I realize is something that I would've botched endlessly, and to great frustration, if I had been trying to do this without the help of Claude. Every time I realize we need to change some tables around, or completely rethink how we're tracking something, the database has to be either rebuilt or edited in a very careful way.

There was a night where we had to completely rethink a few things, and it turned into a 5-stage plan from Claude where each piece became about 30 minutes of back-and-forth decision-making. And each stage had to be done in a precise order so that all the data would be preserved through the migrations.

On top of this, Claude has something like 500+ tests it's running every time it makes a major change at this point. This is an area where I've never been proficient in my development work. And it's wild to see this AI system just preemptively do it. I don't know if it's a matter of Claude picking up that I know just enough... or it realizing I'm an idiot.

What's Next

At the moment I'm in a bit of a back-end stress-test. I'll go about doing some cataloguing; running the credits parsing tool, confirming things, adding roles, checking the front end, and going back to Claude when I find workflow issues that could be smoothed out.

Medium-term, there's the front-end styling, which will be fun and involve a lot more input from the SaberComp Council. With SaberComp 2026's deadline approaching, I plan on testing our submission process by personally plugging in everyone's entries as a sort of mock competition, seeing how the submission form + archive works in real time.

Long-term, I'm hoping we can launch a public archive in time for the 2027 season, so that we can use the fancy submission form—whereby your entry will land on the back end in an envelope for our review, and upon approval, be entered in the database automatically. This tooling is already working, but as I just alluded, has not been fully tested.

Your Help

Beyond that, when we do launch, I intend to have some simple tools for the community to help with the archive. Namely—a "submit a revision" link on any given page where you can tell us what we have wrong, or information you would like to see added.

My vision of the LCC | SaberComp Archive being a permanent home for 20+ years of lightsaber goodness is far closer than I ever envisioned. I'm pretty psyched to share more.

Other than all of that, I won't say no to monetary help to allow me to justify plugging away at this stuff like a crazed raccoon.


Current Stats

  • 24 Competitions
  • 519 Entries
  • 641 people so far

What happens when lightsabers end up in the hands of everyday, modern-world people? It’s a concept we see in SaberComp so many times, whether it’s for an easy way to do a fight or something explored more in-depth. And it’s what kicked off the 2005 fan film Three in the Afternoon and its sequel, Six in the Morning, produced by Travis Boles, who you may remember judging recent competitions. Now after nearly twenty years you can help SaberComp member Travis Boles produce the long-awaited conclusion of the trilogy by kickstarting Nine in the Evening!

Nine in the Evening is entering its final week on Kickstarter and needs your help. A film this long in the waiting deserves to live up to the hype, after all! Travis has a world-class team and plans to make the 3/6/9 universe bigger, better, and weirder than ever before, and among the many possible rewards is the opportunity to get screen-used props delivered to your door at the end of production. To find out how to participate in this piece of Star Wars fan film history, check out the Kickstarter here!

Despair. Fear. The very absence of hope as light fades from the galaxy.

The Jedi Purge. Order 66.

Whatever you call it, the former guardians of peace and justice were hunted down, eliminated within a single generation. Welcome to SaberComp 2026: The Purge.

We’ve seen it countless times on-screen; now it’s time for you to breathe life into those moments in your own way. Within a five-minute short, depict a lightsaber battle that embodies those awful moments.

The catch? Much as the Jedi were pursued, hunted, rushed from shelter to shelter, we’re pushing you too. SaberComp 2026 will be a shorter season, with the final submission deadline being October 24th, 2026.

Why? Because we’ve got an incredible year planned for 2027, with our 25th anniversary and Star Wars’ 50th, and nearly the full year will be competition season in one form or another. But before we can celebrate A New Hope, we need to depict the terror that came before.

Interested in entering? Find the full rules here.

If you like to follow us on social media, there's now one more place to get updates. SaberComp is now on Bluesky!

Hi all! If you like to follow us on social media, there's now one more place to get updates. We're now on Bluesky! If any of you are on Bsky, we'd be thrilled if you dropped us a follow, and we'd love recommendations of people to follow in return!

Feel free to follow us on any of our other social channels as well:

Instagram
Create an account or log in to Instagram - Share what you’re into with the people who get you.
SaberComp (@sabercomp) • Threads, Say more
71 Followers • 12 Threads • The official Threads account of SaberComp, the premier annual lightsaber choreography competition for over 20 years! Formerly LCC of TheForce.net. See the latest…
Saber Comp
Saber Comp. 2,269 likes. The Official Page of the original annual online saber fanfilm festival, aka LCC.
SaberComp (@sabercomp.com)
SaberComp is the internet’s premier saber film competition! Formerly the Lightsaber Choreography Competition of theforce.net, SaberComp is the annual competition that brings together filmmakers from around the world!
SaberComp
Welcome to SaberComp, the premier community for lightsaber combat enthusiasts and creators! We are a passionate group of individuals who share a love for the art of saber combat, and we’re dedicated to providing a platform for the community to come together, learn from one another, and showcase their skills. Our community is open to everyone, from seasoned professionals to newcomers around the world. Whether you’re interested in choreography, filmmaking, or just want to learn more about this exciting art form, SaberComp is the perfect place for you. Join us today and become a part of our vibrant and supportive community! Join our Discord channel to engage with the community and learn your Rank! https://discord.gg/kY2MSNK

How we used Claude Code to develop a tool to track YouTube links across 20+ years of LCC and SaberComp.

One thing we've been diligently working on behind the scenes lately is a single, definitive, internal archive of past SaberComp and LCC entries. This is in support of the elusive "Official Archive" we've mentioned in passing for many years, which will be a public-facing interactive website. It seemed prudent to have something fairly easy to use and edit as we sort of prototype how we might build the real deal.

Every film that's been submitted over the past few years lives in a Notion database—title, creator, competition year, YouTube link, the works. It's a pretty comprehensive record of the community's output, and a place where the admin team can check for any info we have on an entry (cross-linking creators is where it gets really cool).

A view of our internal archive for SaberComp 2025.

One catch, however, is YouTube links are at the mercy of their creators, who can make videos private, delete them, or simply shut down their channel. There's also the challenge every year of ensuring everyone's videos remain "Unlisted" between submission and debuting the playlist. Manually keeping tabs on these would involve the following:

  • Having the Official Playlist open within the a tab signed into the SaberComp YouTube account.
  • Refreshing and noticing a video switched to a generic icon saying “Private Video”
  • Looking at the surrounding videos in the list and locating those in Notion.
  • Figuring out which video, hopefully in the same spot in the list, is missing.
  • Double-checking the YouTube link in Notion–Verifying if it’s Private or Deleted.
  • Setting Link Status accordingly.
  • Videos with a premiere set, luckily just get a “Premiere” tag placed on them.

So I turned to Claude Code, which I’ve been experimenting with recently, to automate the process.

The first version was a straightforward Python script that scanned a YouTube playlist and generated a report of video titles and statuses. It worked, but it had the same flaw as manually checking the playlist: if a video was private or deleted, YouTube wouldn’t tell me what it used to be. I’d just see a missing entry with no reliable way to map it back to a specific submission.

The better approach was to start from our own data. Instead of asking YouTube what’s there, the tool now pulls every entry directly from our internal Notion database using the Notion API (which turns out is free to use), then checks each stored YouTube link individually.

The SaberComp Link Checker is now a Python CLI (Command-Line Interface) that connects to Notion, grabs all film entries for a given competition, and runs each YouTube URL through a Python library called yt-dlp. We only request availability status, which returns one of five states—public, unlisted, premiere, private, or deleted—and updates the “Link Status” field in Notion accordingly.

Running it looks something like:

python main.py "SaberComp 2025"

It'll run through every entry, report back what it finds, and update Notion in one pass. There's also a dry run mode if we just want to see the results without actually affecting the Notion database. Here’s a video of it running on LCC 2015’s database:

0:00
/0:14

Real-time execution of this is about a minute. Past experience has taught me YouTube will get upset if scripts get too aggressive.

It's not flashy, but it's one of those tools that saves a significant amount of manual work. Being able to just run a command and know the health of an entire competition's worth of links is genuinely useful—especially when we're getting the Official Playlist built, and making sure we can view everything for Top 10 selection. A few of you will have received the "hey can you flip your video back to Unlisted?" email from us. This is how we were catching those this year.

Congratulations to all of our Competitors for SaberComp 2025! We had an amazing year thanks to all of you!

2025 Live Stream has commenced. Join for an hour of shenanigans before the Judging begins at 12:00 PM PST!

The time is nearly upon us! In less than an hour, a panel of judges (and Max) will be providing live commentary of the Top 10 selected entries of SaberComp 2025. Our Competitors were charged with embracing the unpredictable. Whether their fight was wild, messy, unhinged, or beautifully off-the-rails, this year was all about energy you can’t bottle.

The Live Judging officially begins at 11:00 AM PST, but you can join the stream now on YouTube and chat with other community members while enjoying some epic highlights from this year's playlist.

SaberComp 2025 Official Playlist has landed! Watch and vote now!

Attention Competitors and SaberFans! The playlist for SaberComp 2025: Chaos is now live! Enjoy the staggering twenty-seven entries from our talented community this year!

The Council and our judges are currently compiling our Top 10 entries and we can't wait to discuss them during the live judging at 11:00 AM PST on Sunday, February 8, 2026 (Join the stream at 10:00 AM PST for preshow chat and shenanigans). But you don't have to wait for the livestream—you can vote now on your favorite entries for the Audience Choice! The poll will close during the live judging stream at 12:00 PM PST, and the winner will be announced during the results portion of the stream, so be sure to get your votes in before then.

Congratulations to all of our talented entrants on completing your SaberComp 2025 entries, and we look forward to seeing you at our live judging on our YouTube channel. Be sure to keep an eye on the SaberComp News Feed to know the moment the judging begins. See you there!

SaberComp 2025 season has wrapped up on submissions.

Lightsabers down! Thank you to everyone who entered this year! We have a total of 27 entries in the Official Playlist, which will debut on our YouTube channel and right here on the website this Friday, February 6, at 9:00 PM EST / 6:00 PM PST. We're excited to show off all the hard work of the community in this truly chaotic season!

The Live Judging for SaberComp 2025 will be streamed on our YouTube channel on Sunday, February 8, 2026, at 1:00 PM EST / 10:00 AM PST.

We are pleased to announce that the Live Judging for SaberComp 2025 will be streamed on our YouTube channel on Sunday, February 8, 2026, at 1:00 PM EST / 10:00 AM PST. We look forward to everyone joining us!

Head over to the Submit page to send us your entry anytime between now and January 31st, 11:59 PM PST.

We're pleased to announce that submissions for SaberComp 2025 are now open! Head over to the Submit page to send us your entry anytime between now and January 31st, 11:59 PM PST. Keep an eye on that countdown at the bottom of the page 😉

Really hoping this all went off without too much of a hitch, since our launch day of January 1st is also the day we open up submissions for SaberComp 2025... a fact that never goes unnoticed on our Discord server.

I commenced the DNS switch late on December 30th. What would normally be a simple matter of unhooking the domain from SquareSpace and hooking it into Ghost via the Hover dashboard was complicated by the fact that I needed to change the name servers in order to route everything through CloudFlare first.

This is to facilitate some other changes I intend to make that CloudFlare will simplify for me. But 24 hours after the DNS change, we're still facing some issues with caches at various levels of the internet. I'm hoping by sometime tomorrow, the kinks will be worked out, and we'll have a smooth transition into the submission month.

Over the years since taking over the LCC and then later SaberComp website, my involvement in the web world has ebbed and flowed. I initially took control of the domain in 2014, while I was actually working full-time as a web developer, designing and coding WordPress themes for photographers.

The first versions of the LCC site handled by me, ended up as a WordPress site, with a premium theme I purchased and made work for our purposes. After some years, and leaving that WordPress theme development job and going back into visual effects, I fell out of practice on the web front. SquareSpace was really coming into its stride around then (2016 or so), so I moved the whole site over there.

For years I've maintained the site there. A couple years ago I made an effort to try to build out more content on it, but was finding myself limited by the engine we were using, and quite bored with the aesthetic. I could have switched it over to the new engine, which I did on my personal site, but my experience there confirmed I was really outgrowing their platform all together.

The previous website at the end of its tenure.

Enter Ghost

I've been on the lookout for a possible platform on which to rebuild the SaberComp front-end site, and definitely tried a few that I thought might be promising. But one that kept standing out to me in terms of back-end functionality was Ghost, which is where we are now. The ease of sending out blog posts as newsletters, and having a built-in RSS feed, was rather exciting for SaberComp, since we definitely have a heap of things to notify the community about throughout the year. And I've long been trying to make the website the de facto source of information.

I've also had an itch to get back into web development a bit more on my own, and between my personal site and SaberComp, I have a couple of test beds to really play around. I'll probably still see about developing my own custom Ghost theme for my personal site, but SaberComp was in more dire need of a makeover. So I started auditioning some premium themes; I had a whole group of tabs saved and I basically kept clicking through their demo sites, wondering how I might be able to utilize their various page templates for our site... and always thinking in the back of my mind: "well I can probably throw some custom CSS in there to really muck things up."

"Bright"

The winner, by virtue of me just deciding on a whim to pull the trigger and start building, was a theme called Bright, sold by Spiritix. It had a lot of the design elements that I'm drawn to at the moment, glassy divs, shimmering hover effects, and of course, some glowy bars.

The tricky part at first was figuring out how to control the theme in Ghost's dashboard. It's basically controlled by internal tags. You create a post the way you would a blog or news update, but assign it a special internal tag that the Bright theme then picks up and knows how to display it. There are a whole heap of #landing-col tags that allow me to populate the homepage with pretty much any type of section I could want... within the confines of what the developer built out.

Our Ghost dashboard of sections and tags.

Hacking it up...

The real fun came when I started showing what I was doing to the Council. Initial reactions were all very positive, but of course then the requests and ideas start coming in. And no one else has any inkling of the limitations I'm dealing with. The Call to Action bit is of course very cool, with the glowing bar shining down on the heading, which takes on our accent color. One of the immediate thoughts was "oh we should have those on other sections too!"

Example image from "Bright" Documentation

This sent me into a late-night binge of scouring the web inspector to see how the heck that glowing bar was even built. Luckily it was all just HTML and CSS. I was able to copy the whole div and paste it into an HMTL block on the welcome section, and then I was able to mess with the styling to make it wider, and give it a custom color. This all ended up being specified inline, right inside some <style> tags on the elements themselves. I am neither proud nor ashamed of this.

The real hard part was trying to figure out how to get it to expand out, as the Call to Action ones do. I finally had an "aha" moment when I was watching the Web Inspector and noticed there was an initial class assigned to the element, that was then removed by JavaScript when it came into view. Since I had initially done and inspect element on the already-visible bar, I never noticed this class. Once I applied that, we were in business. I can now throw one of these little lightsaber bars anywhere I want, and it'll activate on page load (if it's in view) or when it scrolls into view... or at least anywhere on the landing page. I have no reason to expect it'll necessarily work anywhere else.

12/31/25 Edit: Scratch that. Got it to work on the Submission page!

One Last Custom Touch

One thing we've had for many years on the website has been a live countdown. Amazingly, I've been able to use the same countdown service for almost 10 years, which would spit out an HTML block that I could throw into a footer or SquareSpace section.

However, said service finally seems to have taken a turn for the worse. They moved to a new design engine, which was actually much more restrictive than before, and I could no longer access my previous countdowns. So I decided to let ChatGPT take a stab at it. I presented it with the WIP homepage and told it I needed a persistent countdown that sat at the bottom of the page and to style it to match the site.

What you see at the bottom of the page is almost entirely what it came up with. I proceeded to work with it a bit and noodle with the code a little myself, but when I got stuck a few times (my JavaScript skills are very rusty), it was able to help me replace the correct lines with what I needed.

A couple things I particularly like about it:

  • The time listed in the lower left is local to the user viewing the page.
  • Mousing over said time will show a beautiful tooltip that displays the Pacific time we're counting down to.
  • The state of whether the countdown is visible or hidden tracks across your session. As you navigate the site, it'll stay hidden if you've done so, and even through a refresh. Only when opening the site in a new tab will the state reset.

I've been tackling a rebuilding the SaberComp front-end site on a new platform: Ghost. The main things I'm looking to leverage are the built-in newsletter delivery, and the news feed, which should allow us a much more robust way to get the latest news regarding the competitions and general goings on around the community... to the community.

Figured I'd start the feed with something like this. Once we go live, people can go back and check these out :)

Testing the RSS feed
First feedback from Council members <3