01 Live Since 2024
FlashFX
A browser-native motion graphics and video editor. The After Effects workflow, with nothing to install and no licence.
- TypeScript
- WebGPU
- WebCodecs
Backend developer, founder of FlashFX, part-time video editor.
I'm 17 years old
and 287 days 05 hours
49 minutes, 06 seconds, since
One square to the right is one week. Ninety years, 4,680 of them.
928 weeks lived · 19.8%
GNI 2026 · Gara Nazionale di Informatica
Two days of competition at the Istituto Tecnico Pinin Farina in Moncalieri, May 2026, after a first day for arrival, against 31 finalists from technical schools across Italy. Two tests: a project to design and build, and a coding test. I finished first overall.
Read press (Italian)Read from GitHub, LeetCode and YouTube at build time, not typed in by hand.
Every number below is read from @gabrielebolognese at build time.
14,580
Total contributions
Since 29 October 2024
415days
Longest streak
11 Nov 2024 to 30 Dec 2025
34days
Current streak
17 Aug to 19 Sept 2026
The last 12 months. 684 days with at least one contribution since the account opened. The year-by-year split is in the breakdown above.
Live at build, 19 September 2026. @gabrielebolognese
FlashFX landing page project.
Minecraft mod for cities, made with java
Personal digital second brain
Rewrote the plan ladder twice in one afternoon, and put seven screens of joke under the footer.
Read the full entry38 days old, and it shows. Read from @gabrielebolognese at build time. There is nothing here to be impressed by yet, which is the reason to publish it: the interesting version of this block is the one in six months, and it is only interesting if this one exists.
The last 12 months, drawn on the same scale as the GitHub grid above so the two can be compared honestly. 31 active days in it.
Live at build, 19 September 2026.
| Difficulty | Solved | Available |
|---|---|---|
| Easy | 72 | 965 |
| Medium | 122 | 2,115 |
| Hard | 40 | 975 |
234
Problems solved
of 4,055 on the site
31days
Days active
Since 12 August 2026
12days
Current streak
Last solved 18 September 2026
#753,829
Global rank
Across every LeetCode account
Long form on building FlashFX, when something is worth more than a paragraph. Read from @gabriele.bolognese at build time.
9
Subscribers
Channel opened Oct 6, 2024
1video
Published
Latest 11 August 2026
17
Total views
Across the whole channel
One video on the channel, so there is nothing to rank yet. Snapshot, 14 August 2026. Counts read from the channel page, not the Data API.
To get 100k followers on Instagram
Four things, one of them finished.
01 Live Since 2024
A browser-native motion graphics and video editor. The After Effects workflow, with nothing to install and no licence.
02 Live Since 2026
The public roadmap for FlashFX. What has shipped, what is being built, and what is queued behind that, on one page.
03 Live Since 2026
The front door for FlashFX. What it is, who it is for, and the argument for using it instead of the desktop tools.
04 Live Since 2026
The official product documentation for FlashFX. Still in alpha, and filling in as fast as the editor itself does.
05 In development Since 2026
FlashFX for carousels. Built procedurally rather than generated, fast, fully editable, with no AI anywhere in it.
06 In development Since 2026
A board where you buy a square to feature your X, Instagram or YouTube. $2 each, up to 20 by 20, cleared every month.
07 In development Since 2026
Creators rarely know when monetization comes or what to do next. Threshold reads your profile and builds a plan that answers both.
08 In development Since 2026
A study tool shaped like a tree. Every topic is a node, so how deep a branch runs, what is already covered and how it all connects stay visible.
09 In development Since 2026
A daily log of what actually got done. One entry a day, kept so a week is a record rather than something to reconstruct afterwards.
10 Concept Since 2026
FlashFX aimed at 3D motion graphics rather than 2D, with depth as a first-class axis instead of a 2.5D camera bolted on.
Six places, six different reasons. Pick whichever one you actually use.
Build updates and the reasoning behind product decisions. The fastest growing of my accounts.
Connect with meThe FlashFX account. Releases, demos, and what broke on the way to them.
See the updatesExperiments and open work. Most things start here before they are anything.
Browse the codeLong form on building FlashFX, for the things worth more than a paragraph.
Watch a buildThe daily side of it: training, studying, and the parts of building that do not screenshot well.
Follow the logsThe developer profile: work history, stack and projects, in the format other developers read.
See the profileA source profile, for journalists looking for someone to quote on browser-based tooling.
Quote meWhere I read far more than I post, mostly about graphics programming.
Find me thereThe product itself. Browser-native motion graphics and video editing, with nothing to install.
Try it nowWhat I am building, what broke, and what it cost. Sent when there is something worth saying.
The last issue ended with a test for the week after it, and I called the test boring: keep the same cadence for seven days with no spike in them, and see whether the floor moves.
This is that week. What I found out is what cadence costs once it is multiplied by four.
What happened
After launch, every platform turned into a to-do list. Instagram, TikTok, X, LinkedIn, and a few more queued up behind them. Each one had a good reason to be there, and each one, on its own, was a reasonable thing to take on. Together they were not a marketing plan. They were a tide, and by this week I was underneath it.
Nothing broke. There is no wreckage to point at, which is exactly the shape of my last setback, and it is the reason I am writing this one down while it is still happening instead of six weeks after.
Four platforms is four jobs
The mistake is inside the phrase "post everywhere". It sounds like one task done four times. It is four different jobs that happen to share a subject.
A fortnight ago the FlashFX account passed 100,000 views on X inside a single week, which is now on the timeline as a real event. This is about the number underneath that one. Views are a measure of how far something travelled. Followers are a measure of whether anyone wanted it to happen again.
Last week the account reached 300 followers. Seven days. What I did not expect is that the interesting part would be a day in the middle where the number went the wrong way.
The shape
Up sharply at the start. Then a day where the count went backwards instead of forwards. Then up again, past the dip, to 300 by the end of the week.
I want to be precise about how that felt, because the feeling was wrong. On the day it dropped, the obvious reading was that I had posted something bad and was being corrected for it. That reading is almost never right, and it is worth knowing why before it happens to you.
Unfollows lag follows, and that is the whole explanation
Six years. Four rebuilds. One product.
Conflict of interest: this is a self-written account. It exists to lay down how I got from where I started to where I am now, and nothing here has been checked by anyone else. Updated monthly.
Skip storyIt all started when I was 11, in 2020, in peak COVID. The world was locked inside, and I did exactly what every kid my age did: he played games. Minecraft specifically. I tried others, but nothing stuck the same way, I was genuinely addicted, and I didn't fight it. A few months in, I started watching more and more gaming videos, and something clicked: I want to do this. So I started a YouTube channel. I had absolutely no idea what being a content creator actually meant. I genuinely believed that whatever I posted would go viral, no script, no audio quality, nothing. I was posting videos on average daily, some days hitting 4 uploads. On an HP laptop with 1TB of storage and 16GB of RAM. The audio was… bad. Terrible. After a few months of posting raw recordings, I started noticing that people were adding effects to their videos. I was 11, in middle school, zero clue what video editing was. So I did the obvious thing: Googled "free video editing tool." First result was Shotcut. It turned out to be perfect for my machine, lightweight, relatively fast to learn, even if I had to figure most of it out on my own. Around that same time, I hit a wall with Italian tutorials. Searching in English just gave better results. My TikTok feed started shifting to English Minecraft content too, and without even trying, my English improved. Not polished, not British, but real, conversational English. Before I even turned 13, I switched Minecraft's in-game language to English. By the time I was 13, I'd been in the game for over a year and a half, editing for almost as long, but "editing" really just meant cutting clips and slapping on default effects. Still, somehow, the channel crossed 1,000 subscribers with 450+ videos. Looking back now, I'm genuinely stunned it got that far given the quality. The real shift came when I wanted to make YouTube Shorts. Shotcut didn't have a vertical preset, so I had to switch editors, and that's how I found CapCut. This was way back, version 2.9 or 3.0, when auto-captions were still free. For the OGs, you know what that means. Through Shorts tutorials, I started actually learning about pace, hooks, and what real editing looked like.
"The channel was called playmoj"
Then came the crash. The channel had over 600 videos. I was running a hardcore world series, like every other YouTuber at the time, and sitting at around 1,560 subscribers. I was 13, I wanted to grow faster, and like an idiot I ended up on one of those scam websites promising subscribers. They hacked my account, deleted every single video, and replaced them with their own scam content. The channel, playmoj, was gone. I couldn't sleep. I'd lost everything I'd spent over a year building, video by video. I had some clips saved and created a second channel reposting them, but it got 5 views per video. So I quit entirely. That copy channel still exists if you're curious, just don't expect any quality lol: https://www.youtube.com/@playmoj_/videos That hurt more than I expected a YouTube channel to hurt. But it wasn't the end.
After quitting, I didn't touch editing for a while. It was late 2022, I had just turned 14, and I was just browsing around, trying new games. Then I came across Cyberpunk 2077. It looked insane. I had to play it. But my HP laptop couldn't run it, not even close, so I needed a new PC, which meant I needed money. This was the Andrew Tate era. I was a bit late to it because of my age, but after a week of watching dropshipping videos, I stumbled onto one about making money as a video editor. Something clicked. I already knew how to edit, sort of, so I went that route. I created my first Fiverr account and gig. I remember how ridiculously long it took just to set everything up, the gig settings were a lot to go through. But eventually I launched my first public freelancer profile. Worth noting: I was still editing in CapCut at this point. 2 weeks later, a guy with the nickname "hansa" reached out about an opportunity. The job was simple: take a GTA gameplay recording and cut out the best parts. The pay was $5 per video. Each video took well over an hour because the raw footage was sometimes 3 hours long and I just skimmed through it manually. Not exactly great math. Over time I pushed the rate to $15, then $20 per video, which made the hourly pay at least decent.
The channel was Emerals, my first ever client: https://youtube.com/@emeralsrp
Then high school started, and everything got harder. The workload quadrupled overnight and the quality of my edits dropped noticeably. They saw it. But hansa defended me. He knew I was a newbie, he understood the situation, and he kept me in anyway. Some days I was so exhausted from school that I'd edit for 20 minutes with basically zero effort and call it done. He defended me even in those moments. That meant a lot.
In April 2023 I got my first card, a Revolut account under my mom's name, because PayPal wasn't cutting it anymore. By the end of it all, I made around $1,200 from that single editing job over 6 months. It wasn't a lot. But it was mine, and it was the first time I'd ever made real money from something I built myself. June 2023, Emerals quit. Hansa was gone, and just like that I had no income again. But this time was different. Those 6 months had actually made me a decent editor. I knew what I was doing now, at least compared to the CapCut kid who was cutting 3-hour GTA recordings for $5 a pop. And honestly, if I ever become someone, a big part of that is on hansa. He kept me when my quality was trash, when I had zero experience, when school was destroying me. He never had to do any of that. I never even learned his real name. So losing him was my first real setback.
I posted 2 or 3 new gigs on Fiverr. All of them flopped, for months. Nothing. And when nothing is happening, it's very easy to just… stop. So I did. I went back to gaming, no editing, no channel, just wasting time. That stretched all the way to August 2023. Then I came across a channel called "HowToAI," which has since been deleted by YouTube for repeated copyright strikes. That channel was the peak of the YouTube automation era, the idea that you could run a faceless channel using ChatGPT and AI tools and just print money. I didn't know much about ChatGPT at the time, but this channel made it sound like a goldmine. I was convinced enough to actually buy their course.
I started new channels in the video editing niche. And I burned money like wildfire, on YouTube editors, thumbnails, assets, everything. I had zero financial responsibility. The $1,200 I'd worked 6 months to earn started disappearing fast. And then it was just gone. It was December 2023. I had just turned 15. Months of effort, not a single dollar made from the YouTube automation thing. Complete failure. But it gave me something: it showed me that AI was powerful. Like, genuinely powerful. That stuck with me.
Over the Christmas break I started going deeper into it, and somehow that path led me to coding. School hadn't even introduced it yet, that was coming the next year. So on January 3rd, 2024, with a newly released AI called Claude, I started building a tool. January 3rd, 2024. I sat down with Claude and started coding. I had never written a line of code in my life. And Claude at the time was nowhere near as capable as it is now. But I was so excited about this idea of AI just building things for me that I was completely blinded by it. I genuinely thought I had found the cheat code to everything.
I developed for a full month straight. And at some point I needed credits to keep going, which meant I needed money, which I didn't have. So I asked my cousin for a loan. He was 14, running a Vinted reselling operation and selling other stuff online, while I was sitting there with nothing. Which is genuinely funny, because just months earlier it had been the complete opposite. He said yes. I borrowed €200, he sent it over on Revolut, and I bought the credits. But what was I actually building? Let me go back a second.
Remember when I said high school hit me like a wall? The workload was almost unbearable, and on top of that I was doing karate. Time was the one thing I never had enough of. So a thought started forming: what if there was an editor that could make animations faster? Easier? Or even better, automatically? The idea kept growing. I started thinking through every possible use case, every angle, every type of person who might need this. I meditated on it for a while. And then I came up with… The idea had a name: Vision AI Demo. And it had to solve 3 specific problems at once. First, it had to be easy to learn, not overwhelming from the start like so many editors I'd tried before. Second, it had to be completely free, like Shotcut was for me, because I desperately wanted After Effects but couldn't afford it. Third, it had to be lightweight enough to run on any machine, including the kind of HP laptop a broke 15-year-old uses.
So I started building it on bolt.new. Pure vibe coding, zero expertise, just me and an AI figuring it out prompt by prompt. And somehow, it was actually working. Something real was taking shape. Then I asked the AI to move some files around. Reposition them in the folder structure. Simple enough request. It broke everything. Every single path in the codebase got scrambled. Pages were importing files that had been moved or didn't exist anymore, and I had no idea what was happening because I didn't have the technical knowledge to even understand what "file paths" meant. I just knew the whole thing was red and crashing.
I had roughly $55 in credits left. And I did the only thing I knew how to do: I kept asking the AI to fix it. "Fix this error." Over and over, with no further context, because I didn't understand that the root cause was the file restructuring I had requested several prompts earlier. I burned message after message chasing individual errors without ever touching the actual problem. Each fix broke something else. Permanently red. 40 minutes of this and it became clear: it was over.
The project was gone. All those hours. And most importantly, the $200 I had borrowed from my 14-year-old cousin. I had just enough credits left to scrape together a landing page using the few video clips I'd recorded before the crash. It's still up if you want to see what could have been: https://vision-ai-home.netlify.app This one hit like a truck. Much harder than losing the YouTube channel. That was just time. This was debt, something I had never experienced before. It was around March 2024, and my grades collapsed. Zero motivation for anything. Some crying nights, alone, asking ChatGPT why it hurt that much.
The answer it gave me was actually pretty simple: when I started building with AI, I felt something like winning the lottery. I couldn't sleep at night, I'd stay up messaging the AI just to see more progress, more features appearing out of nothing. I genuinely, deeply believed I had won. That I'd be selling this app soon, that the money would come, that everything was about to change. And then it all came crashing down, from the stars to the floor, in a single night. I remember it was a Friday. The moment I realized everything was gone, I had to go to a pizza party with my family. I had to sit there and hide it. What I didn't know yet was that this was only the first of 4 crashes. The first of 4 full rebuilds from scratch. I wrote up what the file path actually cost me and, later, what all four rebuilds cost together. The months after were rough. I tried to restart editing, but there was zero motivation, barely enough to get out of bed some days. I had to force myself because the $200 debt was real and heavy, especially with zero income at 15. $200 at that age isn't nothing.
Nothing came from the editing attempts. Because you can't force output from an empty tank. After about 2 months things started stabilizing, mostly because I landed a one-time gig for $40. Not a lot, but it was necessary. It chipped away at the debt. And from there, I did something risky: I went back to my cousin and asked for another $200 to retry the site. He didn't have it this time. So I had to find another way. August 2024. One year after the YouTube automation disaster. My cousin and I started selling AirPods, not exactly the most ethical operation, but I was still 15 with hopes and dreams, so here we are.
The model was simple: fake AirPods bought at $21 a pair, sold as the real thing. We pooled our money, $40 from me, $10 from him, and bought 2 pairs. A week later we sold 1 for $150. With that we bought 5 more. The plan was to split them, 3 for me, 3 for him, but he'd been doing Vinted reselling for a while already and moved product way faster than I did. So I handed mine over to him too. They sold, though never again at $150, more like $60 to $80 a pair. But it worked well enough that with the leverage of that first successful flip, he lent me another $200. This time I couldn't fail. I genuinely couldn't. There was no more runway. Long story short: I failed again. But not for the same reason as before. This time it wasn't 1 fatal mistake, it was the opposite problem: it got too big, too fast, and nothing was ever finished. Here's what happened.
I started building the editor, which you can still see here: https://create-video-editor-ur5p.bolt.host. Then I got excited and started building a blueprint generator: https://endearing-jelly-e95215.netlify.app. Then another AI video editing tool. Then I went back and tried to remake Vision AI: https://symphonious-maamoul-085d5a.netlify.app. Then yet another AI video editor project: https://ai-video-editor-app-i877.bolt.host. 5 separate tools. All vibe coded. All half finished. All disconnected from each other. None of them good. Another $200 gone. But this time, when the dust settled, it felt different. Not lighter exactly, but different. Because I had actually learned things along the way. New experiments, new patterns, a better understanding of what was and wasn't possible. The biggest realization from all that chaos was this: yes, I could build an editor that runs in the browser. But no, I could not rely on AI to build it for me. That was the line. And I finally understood where it was.
Fast forward a few months. Late 2024, early 2025. Things were stable, not exciting, just stable. School was average, training was consistent, life was moving at a normal pace. Then January 1st came around, and I did what I apparently always do on January 1st: I started building something. This time it was a thumbnail generation tool, because I wanted to give YouTube automation one more shot. I had a few credits left and figured, why not. But something was different about this build. Mostly because bolt.new had switched from their own agent to Claude, which by this point was already becoming genuinely powerful. And working with it, something clicked architecturally that had never clicked before. I had been looking in the wrong direction the entire time. I didn't need to build a video editor in the traditional clips-and-timeline sense. What I actually needed to build was a motion design tool.
That realization changed everything. I still had 4 days of Christmas break left. So I did something I'd never done before: I sat down and started learning TypeScript from scratch, alone, no course, no classroom. I was 16. I started with JavaScript for about a week, then went straight into TypeScript and React. All day sessions, sometimes running into the night. While learning, I also started building. And I figured out that the easiest entry point was a UI design tool. I needed a name, didn't think too hard about it, and landed on FlashFX. Fast, effects, like After Effects. Simple. The very first prototype is still up if you want to see where it all started: https://tubular-profiterole-10ec69.netlify.app. Then go look at what FlashFX is today: https://editor.flashfx.app. The distance between those 2 things gives me actual nostalgia.
Still, I couldn't build everything I envisioned with AI alone. So I also made a separate version myself, something I called FlashFX Editor, a real attempt at building a video editing tool with my own hands. The skills weren't there yet. I knew it. But I was closer than I'd ever been. February 2025. The AI credits were gone. No more bolt.new, no more vibe coding. All I had now was TypeScript and whatever I could figure out on my own. So that's what I did for the next month and a half. Mini projects, one after another. Task managers, small video trimmers, audio remixing tools on the web. Dense, unglamorous, necessary work. I basically learned everything I know in TypeScript during this phase. I'll skim through it because honestly there's not much to say: I woke up, went to school, came home, did TypeScript, went to sleep. That was it. Every day. One casualty worth mentioning: I stopped training for a long time during this stretch, and lost a good chunk of the physical progress I'd built up.
Then April 2025 arrived with a surprise. Out of nowhere, I got a new editing client. Completely random. The month before, in March, I had updated my Fiverr gig presentation video, not because I was actively pushing it, just a small refresh. I had kept the account alive through everything, even through a ban incident I'll get to later. This new client was Italian, working in the financial trading niche, and the offer was actually decent: $250 per month for 4 videos per month. For what the job required, that was good money. The problem was me.
I was still deep in the TypeScript learning phase. I was also trying to actually perform at school for once. And I had just restarted training. The exact problem that made me want to build the software in the first place was now staring me in the face: I had no time to edit. So the edits were trash. After the first payment came in, I was already late on the first deadline. Revisions piled up and I didn't have time for those either. He had paid upfront, and I want to be honest about what I did next: I burned all $250 the same day. Maybe even the same hour. I bought AirPods Max for around $145 to try reselling again, and threw the rest into AI credits. All of it, gone immediately. He threatened to send me to a debt collection agency. I spent an entire day begging him not to. We eventually reached an agreement: instead of cancelling, he wanted 6 videos delivered, not 4, all by a fixed deadline. So I did them.
The revisions were brutal. I think I burned a few hundred hours across those videos. Some had 5 revisions, some had 8. At times 2 rounds in a single day, constantly exporting, sending, waiting, fixing, repeating. My grades collapsed again. So badly that I actually didn't pass the year in June and had to take a recovery test in September just to be admitted to the next year. But the client, to his credit, understood what was happening. He stopped at 5 videos and let it go. When that was finally over, the relief was genuine. I just sat there and breathed. This is probably the center of the entire FlashFX story. After everything, the wasted credits, the 145 fake AirPods Max sitting in a box that I never sold to a single person, the endless revision cycles, the failed year, I was at zero again. And then I saw it: Bolt's world's largest hackathon. Over $1 million in prizes. First place: $100,000 in cash.
That number hit me like a defibrillator. If I won this, or even placed, it would fix literally everything. The debt, the credits, the pressure, all of it. In 1 shot. The excitement that came with that realization was unlike anything I'd felt in months. So I made a decision: full rebuild. Third one. Forget the thumbnail design tool. Forget the motion graphics direction. This hackathon had a lot of design tools competing, so I needed something original. I went back to the editor concept and started building the second version of FlashFX Editor from scratch. And because the hackathon required all projects to be built in bolt.new, I was vibe coding again, but this time with a critical difference: Bolt gave all participants free premium access, around $20 in credits. Every single prompt had to be perfect. I couldn't waste one. I also did something I hadn't done before: I built a team.
There was me. A friend of mine. And a guy I met directly through the hackathon, who went by the Discord username "developer guy." He was in his 30s, an experienced TypeScript developer, while I was still 16. When we didn't want to burn bolt credits, he would jump in and write code directly. He was a massive asset. The build lasted a month. Tailored prompts, careful decisions, developer guy filling the gaps. But when the deadline arrived, the product still wasn't complete. Not even close, honestly. Then the last 3 days happened. Developer guy clutched. He tore through the worst bugs, the ones that made the app genuinely unusable, and got the export function working. Trash quality exports, but exports. It worked enough to submit.
"I finally understood where the line was: I could build it. But I could not rely on AI to build it for me."
June 30th, 2025. Submission day. We sent it in with full hope that something, anything, would come of it. You can still find the hackathon build here: https://flashfx-project-fina-yfbd.bolt.host. Probably the single most important artifact in FlashFX history. And it was also here, somewhere between the last-minute bug fixes and hitting that submit button, that we made it official. We weren't just building a tool anymore. We agreed to make a company. We called it FlashFX.
The decision day for the hackathon winners were on july, i remember attending the awards, full of excitement for the third time, and for the third time, a massive delusion... not only we didn't win anything, but the idea that won the first place was literally a video editor like ours. the idea of an ai video editor has won, but not ours, because it was uncomplete. and once again, out of HUGE, immense regret, i deleted the project, keeping only the link above as final proof. but one thing was learned: we pitched the idea to all the other hackathon members, and it got huge respect. people actually wanted it, there was market demand. this wasn't a sign to stop but to keep going one more time.
This time, i made flashfx starting from that old project for thumbnail generation (https://tubular-profiterole-10ec69.netlify.app) started learning how it worked, and started making my own updated version. i was also getting a few side gigs, that allowed me to do more tests with ai for the actual ai video editor, one of them is still up at https://create-thumbnail-des-n8ht.bolt.host
when i had a working prototype on my own, i started using ai again to make a better frontend,
while i was still learning libraries like theatre.js for scenes, three js for 3d models, and
many more.
i started making different versions (with the help of bolt) like:
- Very first demo: https://loquacious-fenglisu-cfa1be.netlify.app
- first actual working prototype: https://flashfx-duplicated-1d4a.bolt.host
- FlashFX with 3d: https://flashfx-duplicated-6a36.bolt.host
other tests have minor improvements.
in this time i also started growing the community, with the discord, the instagram and on december 2025, after turning 17, linkedin, that by now, is the fastest and best growing social. on February 2026 i started making flashfx V1, the first very functioning version, with no bolt.new unless frontend and some libraries implementations, and the difference is very noticeable.
"Photoshop became Canva. Premiere became CapCut. Now After Effects becomes FlashFX." The argument, in full
A little earlier, in January (good things always happened in january, like always), i got to know my future co-founder, remember when i first quit Minecraft and started going into Youtube automation? i also met him, he owned a discord community that at the time had little over 1200 members, and asked me if i could be an editing mentor for a course of his. i accepted, got actually a sale, then quit in that difficult moment when i failed everything in youtube automation and lost my hard earned 1200. we remained in contact once every 2 months at best, then on december, he joined flashfx team, and on jan he became official co-founder. and he hired a very talented marketing manager called Camille Luciano from the philippines, that helped us so much with building the socials and the discord. turning flashfx into an actual team. I've gone very fast on the last 7/8 months because it was essentially growth, i finally exited after the hackathon that loophole of doing something and not completing it, now the app finally works.
all this to have: https://flashfx.app
On 7 August 2026 FlashFX opened to the public, finished rather than in pieces, and the legal structure started underneath it the same day: an Italian S.r.l., which is what a company here actually is once it stops being a person with a project. Both of those are their own story: launch day and the company underneath it, and the six weeks before it that nearly cost me the date.
Over €5,000 went in before the first day of trading, none of it on the product. Everything up to this point was building. This part has a balance sheet, and it is one day old, so there is nothing honest to write here yet beyond that it has begun.
What happens next is not written here yet. It is in the devlog, most days, and in the newsletter when it is worth more than a paragraph.
A record of the milestones, launches and moments that shaped my path.
Age 11. Peak COVID. A Minecraft YouTube channel launched with zero knowledge of what content creation meant, no script, no audio quality, sometimes four uploads a day on an HP laptop. After a few months, discovered Shotcut through a Google search for "free video editing tool." Also the year English replaced Italian as the primary language for tutorials, gaming content, and eventually everything.
Age 12. playmoj had grown to around 350 uploaded videos, posted with near-daily consistency since the channel's start. No strategy, no monetisation, no audience playbook, just an obsessive upload rhythm on a family HP laptop. The editing had improved, the thumbnails had improved, and for the first time it felt like something real was being built.
The channel, playmoj, had over 600 videos and sat at 1,560 subscribers. A scam website promising subscribers led to a full account compromise: every video was deleted and replaced with scam content. A year and a half of daily uploads, gone in a night. Some clips were recovered and reposted on a second channel. It got 5 views. Then everything stopped.
Age 14. Needed money to buy a PC that could run Cyberpunk 2077. After a week of watching Andrew Tate-era dropshipping videos, landed on a video about making money as a video editor. Already had the skill. Created the first Fiverr account and launched a gig, still editing in CapCut.
Two weeks after launching the first Fiverr gig, a user called "hansa" reached out. The job: cut 3-hour GTA recordings down to highlights. Pay: $5 per video. Each edit took well over an hour. Over the following months, the rate climbed to $15 then $20. Hansa kept the job going even when school destroyed the quality. He never had to.
April 2023: opened a Revolut account under mom's name as PayPal was no longer sufficient to handle freelance payments. The first real financial infrastructure for the business, at 14 years old.
June 2023: hansa quit, and with him the Emerals editing contract ended. Over six months, roughly $1,200 had been made, the first real income ever built from scratch. The rate had been pushed from $5 to $20 per video. When it ended, the skill was real. The income was not.
After months of failed Fiverr gig attempts following the loss of the Emerals client, stumbled onto a YouTube channel called HowToAI promoting faceless AI-automated channels. Bought their course. Started burning money on editors, thumbnails, and assets across the video editing niche, fast.
December 2023, just turned 15. Months of effort, zero dollars made from the YouTube automation experiment. The $1,200 earned from six months of editing work had been burned on editors, thumbnails, and assets. Complete failure, but the exposure to AI tools left something behind: a genuine conviction that AI was powerful, and that it could be used to build something real.
January 3rd, 2024: sat down with Claude and started coding for the first time. No prior experience. The idea, an editor that could make animations faster and easier, had been forming for months. Built on bolt.new through pure vibe coding. For weeks, it was actually working. Something real was taking shape.
Qualified for the Italian mathematics nationals in the champion category. Competing at this level while simultaneously failing school due to freelance overload and managing the early stages of FlashFX development.
A single file restructuring request scrambled every import path in the codebase. With only $55 in credits left, the same error-chasing loop burned through everything. The project was gone. The €200 borrowed from a 14-year-old cousin was gone. It was a Friday. A pizza party had to be attended. The grades collapsed. Some nights were spent asking ChatGPT why it hurt that much.
With no other runway available, started a resale operation with a cousin: fake AirPods bought at €21 a pair and flipped for €60–150. The first pair sold for €150. The profits funded another €200 loan to restart FlashFX development, leading directly to the fourth and final rebuild.
Placed at the top of the national coding competition. School had only introduced coding the year prior; this placement came after months of self-teaching TypeScript, React, and browser-based tooling, all driven by FlashFX development, not classwork.
January 1st: started building a thumbnail generation tool and had the key architectural realisation, not a video editor, but a motion design tool. Started learning TypeScript from scratch, no course, no classroom. Named the project FlashFX. The first prototype went live within days. The distance between that prototype and what FlashFX became still gives genuine nostalgia.
With bolt.new credits exhausted, all vibe coding stopped. The next month and a half was nothing but solo TypeScript: task managers, video trimmers, audio remixers, dense, unglamorous, necessary work. This stretch produced the core technical foundation that FlashFX would eventually be built on.
A new Fiverr client appeared out of nowhere after a small gig presentation refresh the month before. An Italian client in the financial trading niche, offering $250/month for four videos. The job spiralled into brutal revision cycles, collapsed grades, and a failed school year, but it also funded the next phase of FlashFX development.
June 30th: FlashFX Editor was officially submitted to the Bolt hackathon. The team committed to building a company together on the same day. The submission marked the moment FlashFX went from a personal project to a formal venture.
FlashFX Editor was submitted to Bolt's world's largest hackathon, featuring over $1,000,000 in prizes. The team, including "developer guy," an experienced TypeScript developer met through the event, spent a month building and clutched a working export in the final three days. The project didn't place. The winner was also a video editor. The idea was validated. The product wasn't finished.
The FlashFX Discord community crossed 3,400 members, all acquired organically. The community had become one of the core distribution channels and proof points for product-market fit heading into the v1.0 launch.
FlashFX launched publicly for the first time as a fully working product. After four complete rebuilds and nearly two years of development, the app was finally something real, a browser-based motion design and video editing platform that actually worked.
FlashFX crossed 5,000 users entirely through organic growth. LinkedIn was launched as a founder visibility channel and quickly became the fastest-growing social platform for the project. Also the month of turning 17.
Someone I first met years earlier, during the YouTube automation era, became official co-founder after rejoining the project in December. He brought on Camille Luciano from the Philippines as marketing manager, turning FlashFX into a real team and accelerating community and social growth.
FlashFX v1.2 shipped with a dedicated AI animation tier, marking the first monetised feature beyond the one-time 3D unlock. The first genuinely stable, production-ready version of the platform, built almost entirely without vibe coding.
FlashFX received an interview invitation for Y Combinator's Summer 2026 batch. The culmination of two years of building, failing, rebuilding, and growing to over 8,000 organic users, all before turning 18.
My co-founder, official since January, left. What followed was not a bad week but a bad month: every week of June went the same way, ground lost rather than gained, against a launch date that did not move to make room for it. The run did not end with June either; it carried through the week before Dublin, and picked back up the day I returned.
Fourteen days in Ireland. English stopped being a school subject and became the thing every day happened in, which taught me more in two weeks than a year of lessons had. Found a calisthenics community training outdoors in the city and trained with them, in a place where nobody knew me or what I was building. The trip was worth taking. The date was not mine to choose, and it fell in the run-up to launch: the two weeks a launch can least afford to lose.
Came home on 24 July to a project that had lost its momentum, and the twelve days that followed went on recovering ground instead of gaining it, the stretch that was supposed to be the final push before launch. A month already lost, two weeks away, then twelve days spent catching up: that is the real cost, and it is the honest half of the trip. It broke on 5 August. Everything since then is in the devlog.
FlashFX opened to the public, complete and fully usable rather than released in pieces. The same day, the legal structure underneath it started: an Italian S.r.l., the limited-liability form a real company takes here, with a notarial deed, a registration in the Registro delle Imprese and a tax number attached to it. Over €5,000 went into getting to this line (subscriptions, compliance, a business advisor) before a single day of trading. Two years of building end here, and the part with a balance sheet starts.
The FlashFX account passed 100,000 views in a single week, the first time it has done that. Eight days earlier the product had launched, so this is the first week the account had a finished thing to point at rather than a work in progress. Reach is not revenue and 100,000 views is not 100,000 people, but it is the first evidence that the distribution side works at all, which two years of building had never tested.
A month after launch, Instagram, TikTok, X and LinkedIn each turned into a daily job of its own, all taken on at once, and by this week they had crowded out the building. Nothing broke, which is the same shape as the six weeks before launch, and the reason this one is named in its first week rather than its sixth. Written up in the marketing mess.
One week after the marketing mess, the platforms have a rhythm instead of a tide. TikTok is running for the first time, and three Instagram accounts are posting consistently, not whenever there happened to be room. YouTube is still not started, and that belongs in this entry too: a comeback is not the same thing as every platform being handled, and a gap is worth writing down while it is still only a gap.
To be continued
The timeline is updated for every major event, usually once a month.
What I shipped, what broke, and what it taught me. One line a day from inside FlashFX, with the long version underneath.
Scope of the session: pricing, and one deliberate piece of nonsense. 3 commits, 12 files changed, +341/−89, one new component.
Nothing today was checked in a browser. The autoplay-on-arrival behaviour, the section rhythm and the pricing table’s appearance are verified structurally only.
The $29 tier is Pro, and the $39-per-seat Teams tier is gone, replaced by Ultra at $89.
/pricing metadata (three separate title and description pairs), its
Offer graph, four FAQ answers, the refund-policy standfirst, the 404
route list, and the collaboration row in comparisonData.ts. Four of
those are read by crawlers. Editing only PricingSection.tsx would have
left the old prices live in the structured data while the visible page
showed the new ones, which is worse than either being wrong on its own.The plan ladder was then revised again, hours later, on stated numbers.
PricingSection.tsx says not to “restore” the ratio, because the
derivation reads as more principled than the explicit numbers and someone
will be tempted.Deleted the claim that the free tier is a complete manual editor with no AI features.
FIX.md as
unresolved rather than guessed at. Same with advanced materials, PBR,
toon and wireframe: it was the one 3D row not named in the list to open
up, so it stayed paid instead of being swept along with the other four.Six full-height sections below the footer: two blank, “Stop scrolling”, blank, “I warned you”, blank, then a muted video.
index.html and absent from pricing, faq and about.app/layout.tsx, so “under the
footer” leaves the layout as the only mount point, and the layout is
every route. Seven viewport-heights of joke under the refund policy and
six SEO landing pages is a defect, not a joke, so the component gates
itself on usePathname().The site backdrop measures scroll progress against the end of the page rather than the end of the document.
SiteBackdrop drives its colour ramp off scrollY / (scrollHeight - innerHeight). Adding seven screens of padding stretches that
denominator, so the real content would never reach the light end of the
gradient and the footer would sit in the same navy as the hero: a joke
below the fold quietly recolouring everything above it. Fixed by
subtracting the height of any [data-fx-beyond] element, which is a
named contract rather than a special case for one component.The video got its own visibility observer instead of the shared embed hook.
useVideoEmbed carries a 400px rootMargin so videos are
ready before you arrive, which is exactly wrong here: it would have the
video playing to an empty screen while the visitor is still two sections
above. This one has no rootMargin, a 0.55 threshold, and disconnects
after firing so it cannot restart on the way back up. Muted regardless of
the brief, since no current browser honours autoplay without it.Verification, and one false alarm.
<iframe> on every route, and the
video id is not in it until the observer fires. The Offer graph on
/pricing carries Free $0, Pro $29, Ultra $89. No “Teams” and no “$39”
survives on any route./pricing
and was wrong. The pattern assumed the script tag opened with its type
attribute, while the tags carry an id first. The structured data was
correct all along. A pattern that finds nothing looks identical to a page
that contains nothing.Scope of the session: the 3D camera and the editor around it. 24 commits, one of them empty and pushed by accident, 52 files changed, +2777/−323. Typecheck stayed at 0 errors and lint at its 127 baseline through every commit.
Anything touching WebGPU or pointer behaviour is verified in the Node harness only, so it still needs a browser to feel.
The Cloner no longer crashes the editor, and it draws its instances.
verify:cloner-render, 8 assertions.else filed it as a shape, so the shape packer dereferenced
layer.shape and threw on every single frame.resolveFrame now expands a
cloner into per-instance stamps of its source layer and hides the source,
the way C4D does, and the bucketing skips any resolved layer with no
payload. The note in CLAUDE.md claiming the if-chain “safely skipped” it
was wrong, and has been corrected.Space plays the video even while a number field has focus, and Esc or a click outside deselects.
<input> swallows Space as a literal character,
so “press space to play” silently typed a space instead. Play now wins
over the field, except while text is actually being edited, and deselect
had to clear the canvas selection and the timeline selection both.Multi-select outlines sit on parented objects instead of up and to the left of them.
The site and the app got a search-engine pass, and the FlashFX mark now sits in both headers.
index.html head, plus robots.txt,
sitemap.xml, a web manifest, an inline brand logo, and a rasterised
social-preview image and touch icon.& inside the OG image’s aria-label broke librsvg,
which is strict XML, and produced a blank PNG; escaping it to &
fixed it. The sitemap lives at editor.flashfx.app/sitemap.xml.The dashboard tabs work: Recents, All, Starred, Trash and Templates.
verify:trash, 5 assertions on the retention math. 7 days to
purge, 30 if starred, and a permanent delete that asks you to type the
project name, the way GitHub does. The new Templates tab carries 4 scene
deep links: galaxy, city skyline, rocket launch and forest.trashedAt plus retentionDays) rather than
stored, and “starred gets longer” had to survive the round trip with no
background job to lean on.An After Effects style Camera Settings dialog, with coupled lens fields and working depth of field.
verify:camera3d,
24 assertions. How After Effects actually behaves was researched with a
multi-agent workflow first, then the algebra written to match it.Z = f·C/F, so
storing all of them would desync the moment one was keyframed. Only Zoom,
in pixels, is stored and render-affecting; focal length, angle of view
and f-stop are derived for display and cannot drift. Depth of field is a
per-3D-layer circle of confusion routed through the existing blur
pipeline, honouring After Effects’ “lock to zoom”.Fewer buttons in the editor chrome.
A 2.5D Camera Parallax template.
A 3D View in the inspector: a flat schematic of the world, next to the live canvas.
viewBox with the default preserveAspectRatio, which letterboxes,
while the pointer math assumed a linear stretch, so clicks skewed on the
letterboxed axis. Fixed by tracking the element’s real pixel size as the
viewBox with preserveAspectRatio="none", which gives a 1:1 pointer
mapping on both views.A “Disable Camera” toggle renders the screen flat, as if no camera existed.
Camera interaction polish.
A camera-path keyframe editor inside the 3D view.
The camera path is a smooth spatial bezier with draggable tangent handles.
verify:camera-path, 4 assertions: collapse-to-lerp, byte
identity, bow and u-tracking. Right-click a segment for Smooth (automatic
Catmull-Rom tangents), Straight or Hold.u is extracted from the actual
interpolation of whichever axis moves most, so easing and holds on the
position keys still drive the fly-through.Project cards show a random frame from the scene, refreshed on every open.
canvas.toBlob() on the WebGPU
canvas at teardown, which hands back a blank or stale frame. The new one
renders a random frame to an offscreen target on the live device, reusing
the warmed-up texture caches and never touching the visible canvas so
there is no flash, then downscales to a small WebP and overwrites the old
blob in place.A loading splash covers the editor on open until the scene, the assets and the first frame are ready.
Every Transform property row has a revert-to-default button.
Scope of the session: competitor facts, and one full-bleed 3D section. 10 commits, 21 files changed, +1573/−255, two new components and four supplied logos.
Centred four tool logos that sat off the ends of their own cables.
transform inline, so animating y or
scale on the same element that carries Tailwind’s -translate-x-1/2 -translate-y-1/2 silently discards the centring and positions the
element by its top-left corner. That is half a logo in each axis, not a
few pixels, which is why nudging offsets in the previous two commits
changed nothing. Fixed by splitting centring (outer div, plain inline
transform) from animation (inner motion.div). The trap is already
documented in CLAUDE.md and still cost three attempts in one file.Published an After Effects install size, then corrected it 39 minutes later.
LoadTime,
SystemRequirementsSection and FeatureComparisonTable.helpx.adobe.com is unreachable from this environment,
timing out on the current page, both versioned pages and the /in/ and
/sg/ mirrors, across several sessions. The first commit aligned
everything to 15 GB because that is what the site had already been
publishing. Weighing four secondary sources afterwards put two
independent references on 8 GB tied to a specific build (25.6, November
2025), against one on 15 GB with no version tie and one on 5 GB matching
older releases. The site’s long-standing number was the weaker reading.
Corrected to 8 GB, still second-hand, with the source table recorded in
FIX.md so it can be re-weighed rather than re-derived.Looked for the DaVinci Resolve equivalent and found that no published figure exists.
A full-bleed section of flat layers standing in depth, with a camera moving through them.
R*tan(fov/2) roughly constant, so the framing never
improved. Replaced with a bounding-sphere fit, radius / sin(half fov),
recomputed on resize since horizontal fov moves with aspect. A sphere is
the same size from every direction, so the framing holds at every angle
instead of at the one it was tuned at.Reordered the pen tool demo so the cursor moves, clicks, and only then places the anchor.
curved, the 0-to-1 blend from polyline to bezier, was
assigned rather than animated, so the one moment a pen-tool section
exists to show was crossed in a single frame. Driving it with framer’s
animate also fixed the handles, which are drawn at cx * curved and so
now grow out of the anchors rather than appearing at full length.
Splitting the curve into one path per segment, which the draw-on needs,
forced the stroke gradient to userSpaceOnUse, or each segment would
have restarted it: four small rainbows instead of one sweep.The screenshot carousel expands on click, with arrows the height of the image.
onDragStart once its own threshold is crossed, which makes it
exactly the signal for “that was a drag, not a tap”. The arrows track the
image height with items-stretch, so the row takes its height from the
only item with an intrinsic size and nothing has to measure anything.Scope of the session: breadth. 40 commits, +9917/−362, about 253 file changes, across eight areas of work. Typecheck stayed at 0 errors and lint at its 127 baseline through every commit.
Anything touching GPU rendering or pointer behaviour is verified by structure only, Node harnesses plus guards, so it still needs a browser to confirm by feel.
Six more Figma time-saver milestones, M17 through M22.
A tutorial that builds a complete title-card scene by driving the real editor.
Buttons on the landing page open the editor on a template that plays immediately.
/?template=<id> loads a fresh project that plays
on open and can then be edited; the first one is a tuned particle hero.“Use this” inserts a working animation at the playhead, timing and motion included, not only the artwork.
verify:anim-templates, 132 checks.An AI chat panel that can be toggled on, in the style of VS Code and Copilot.
streamResponse() seam with a canned
reply behind it, so a real model drops in later with no change to the UI.A new layer type that draws patterns on the graphics card at full resolution.
generativePattern covers 11 types
(waves, plasma, kaleidoscope, mosaic and 7 more) with a palette editor,
and the layer has bounds, so it moves, resizes and masks like a
rectangle, with animatable scale, rotation, warp and contrast, and
blending with the layer below. verify:pattern, 16 checks.'plasma' !== 'clouds'. And blend cannot read the
scene texture progressively, so each mode is a separate pipeline whose
fragment output form is matched to its blend state: 4 variants, normal,
add, multiply and screen.The timeline’s layer-name column sizes itself to the busiest track.
The start of After Effects style cards positioned in space.
verify:mat4, 9 checks; verify:camera3d, 17; verify:scene3d, 5.is3D flag. M0 is a matrix core plus optional Z position and X/Y
rotation on Transform. M1 is a camera layer that resolves to view and
projection each frame, and its default frames the composition 1:1 at any
zoom, so a single layer switched to 3D does not jump. M3 is the per-layer
3D toggle, with X, Y and Z position and rotation rows in the inspector.
M2 is the renderer projecting each 3D layer through the camera in the
shader (added to the image, shape, text and pattern uniforms) and sorting
by depth, far to near, with 2D layers holding their existing order.is3D flag means no 2D layer can be affected, and everything that is
actually hard, parity, foreshortening and painter order, is proven in
Node.Scope of the session: new sections, and the cost of rendering 176 of anything. 37 commits, 133 files changed, +6052/−656, twenty new components and nineteen new images.
Eight new sections, at roughly one per 25 minutes.
app/page.tsx is a server component, and
dynamic(() => import('./X').then(m => m.X)) written there fails at
prerender with “Cannot access X.then on the server”. The dynamic call has
to live inside a 'use client' module. Two files exist only for that.The 176-card feature grid skips everything off screen.
content-visibility: auto alone breaks the page. A skipped
card measures zero, so the document collapses and the scrollbar jumps.
contain-intrinsic-size: auto 190px is the necessary other half, and
auto is what makes the browser remember each card’s real height after
it has rendered once.title: pattern matching entries outside the three
data files.Removed the last grid backgrounds, so the shader field runs through every section.
#141f40, and meeting a shader field they would read as
a hard seam. It keeps its solid ground, with a lead-in gradient taking
the page from the field into the flat colour.Settled the RAM floor at 4 GB across the site, and removed every em dash from visible copy.
/lightweight-video-editor alone said “Works on 4 GB” twice and
“Requires only 2 GB” once..join(' ') calls. Caught because the candidate count jumped from 206 to
248 between runs; fixed with an early return so only dash-bearing lines
are touched. A blind dash-to-comma replacement also produced comma
splices (“you are always on the current version, there is nothing to
download”), so the replacement is keyed on the word after the dash:
connector to comma, clause-opener to full stop, -ing to comma, digits
to hyphen, otherwise a colon.The editor has a single deep-link contract in lib/editor.ts.
?template=<id>, with a whitelist typed so an unknown id is a
compile error.Moved the workstation figure out of the laptop it was rendering inside, then reverted it.
preserve-3d stack, so the browser interleaves them.
It is not a spacing problem, and moving the figure down or forward does
not fix it: the shapes intersect. The revert restores the
interpenetration, which the commit says out loud rather than quietly
putting things back.