Proof of work · 1999–today
What I've built
I've been making software products for more than 25 years. Some paid my rent. Some earned enough for a coffee. Some were used by thousands of people. Many failed.
This is the full record.
How it started
I first touched programming on an Amiga. I did not know what to type, and there was no web full of tutorials to tell me.
In 1997 I became a Linux fan. Linux came in four-CD packs because my 33.6K connection could not download it without blocking the phone line for days.
I bought a huge JavaScript book about Netscape 3.0. I learned PHP 3 by printing the entire manual. Then I started putting things on the web.

1999: Linux Hideout
My first public project was an Italian Linux site at linux.clavis.it. A friend worked at the ISP and got us a subdomain. Hosting and domains were expensive, so this mattered.
The design was inspired by Yahoo. The screenshot shows 5,902 visits. Visitor counters and webrings were the tools of the time.
The programming site that stopped after one bad comment
At university I made an Italian programming site and wrote articles about C, Java, AJAX, and the web. I shared them in a forum. Someone told me they were poorly written, so I stopped.
Years later I built my career by writing programming articles. Early feedback can point you forward, or make you quit too soon.
An automated ebook site and my first WordPress plugin
I was collecting ebooks and experimenting with automation. I made a site that scanned them, combined fragments, and generated pages. It started ranking in search, then a publisher complained about a trademark and I took it down. It was an early lesson in the difference between getting traffic and making something useful.
I also made a free WordPress marketing plugin. Google still exposed the search term that brought someone to a site, so the plugin used it to show that visitor a different message. It was clever and got little traction.
2007: my first course and course platform
After my computer engineering degree I started my own company. I did client work, wrote an Italian web development blog, and created a paid video course about building sites with Joomla.
Course platforms did not really exist, so I built one. It had video, text lessons, quizzes, and student accounts. Then I spent so much energy building the platform that I lost motivation to make more courses.
My first software business
JooCode was my first real software business. I built and sold a portfolio of extensions for the Joomla CMS.
The first paid extension fixed one small annoyance: after registering, Joomla made a new user log in again. My plugin logged them in immediately. It took about one hour to build and sold very well.
That result pushed me to build at least 15 extensions, including an e-commerce system, mapping software, export tools, analytics, and small utilities.
Thousands of developers bought JooCode products. Some products paid the rent. For periods, software products were my full-time income.
JooCommerce was the largest. I wanted an e-commerce system that normal people could configure without buying a chain of add-ons.

I stopped maintaining it years ago. Another developer later continued it as JooComShop and still credits JooCommerce as the original project. Software can outlive the person who made it.
Mobile apps, Mac apps, and a WordPress failure
About two dozen iPhone and iPad apps
I learned Objective-C, Swift, Cocos2D, and Apple platform development. I made a windsurfing session tracker, Naval Battles, a physics game with a squirrel and birds, music apps, utilities, and more.


The apps never took off. Together they paid the Apple developer membership and, from time to time, a coffee. I removed them all from the App Store.
Six Mac utilities before Electron
I used Ember.js and MacGap to build desktop apps with web technology. I made Code Snippet, a notes app, a recipe app, a device database, and My Bills.
They sold a few copies each week for years. None became a meaningful income stream.

CommerceKit
Joomla sales were slowing down, so I rewrote the JooCommerce idea for WordPress. I called it CommerceKit and released it for free.
Almost nobody downloaded it at first. I removed it after a few months.
CommerceKit could have become something like WooCommerce. That was the idea.
But WooCommerce and the other popular shopping cart extensions were already the default choices. Almost nobody was looking for another one. Breaking into that market was basically impossible, and I did not have enough perseverance and grit to make it work.
GravCart and Gitometer
Working on Grav and building GravCart
I worked as a core developer on the Grav CMS as a contractor. I also moved my e-commerce idea to Grav and released it as open source, with commercial payment add-ons.
The shopping cart repository has 321 commits, 22 releases, 54 stars, and 24 forks. The official Grav plugin registry still lists the cart and my Stripe and PayPal add-ons.
Adoption was slower than I hoped. Community contributions did not grow enough to make the project sustainable, so I stopped maintaining it.

Gitometer
Gitometer turned GitHub repository history into timelines and charts. I first wrote it in Laravel, then rewrote it in Go to make it faster.
I asked GitHub users to try it. They were not interested, even for free. It looked good and taught me a lot, but it did not solve an important problem. I stopped before trying to charge for it.

The first Prototyped
In 2020 I tried again. The original Prototyped was an authentication blueprint for developers tired of rebuilding signup, login, password reset, OAuth, and email confirmation.
Before building it, I made a landing page. In two weeks it received 1,935 visits and 130 waiting-list signups. I emailed the list and got 12 detailed replies.
Those were good validation numbers. I still paused the project. I was running courses, and I did not commit to the long maintenance cycle an authentication product deserved.
Years later I reused the name for today's source software catalog. Names can come back too.
The teaching era was also a software-building era
In 2017 I started writing again. In 2018 I focused the site on JavaScript and web development. I published an ebook, then a course, then another.
From the outside it can look like I stopped making software and became a teacher. The folders on my computer tell a different story. I kept building. The users were now students.
The blog itself was a product
I built and rebuilt flaviocopes.com as a publishing system. Over the years the blog had tens of millions of visitors.
It was not just marketing for the books and courses. The tutorials were useful on their own. The site became a large, searchable library that I owned and could keep improving.
I built the publishing machine
I did not just write books. I built the system around them. The same source material became an online handbook, a PDF, and an EPUB. Scripts generated every format and copied the finished books into the right sites.
I made separate sites for the JavaScript, React, Vue, Node.js, Next.js, HTML, CSS, Go, Python, C, Linux, SQL, and other handbooks. Later I brought many of them together inside The Valley of Code.
I kept rebuilding the course platform
I made individual platforms for the JavaScript Course, React Course, Vue.js Course, Node.js Course, Web Platform Course, Next.js Course, and the different Bootcamp cohorts. Each version reflected what I needed at the time.
Some were simple static course sites with private access links. Others had student accounts, passwordless email login, checkout webhooks, member lists, videos, text lessons, quizzes, and progress tracking. One platform could run several courses from the same codebase and included my own editor for arranging lessons as a tree of connected pages.
I built drip-course systems too. In one JavaScript Masterclass, a new lesson opened from Monday to Thursday, followed by questions and challenges over email. Friday brought the solutions. The Bootcamp platforms unlocked new modules every week and recorded which lessons a student had read.
I rebuilt the Bootcamp site for different cohorts. The 2020 and 2021 versions used a custom Hugo course theme. The 2022 and 2023 versions moved to Astro. A later version had a full login system and its own database. The result was never a generic learning management system. Each platform fit the way I taught at that moment.
The Valley of Code had several lives
The most ambitious early Valley was a complete subscription learning app. I built accounts, email login, billing, a course catalog, filters by topic and difficulty, enrollments, a student dashboard, lesson progress, course completion, and planned learning paths.
I did not keep that version. I rebuilt The Valley of Code as a library of programming handbooks, with 16 books available to read online and download. Then I rebuilt it again as a broader home for programming tutorials and courses.
In the archive I found a Gatsby prototype, the subscription app made with Next.js and MySQL, the handbook site made with Astro, and the later content platform. They are not four different ideas. They are four attempts to find the best container for the same idea.
I built the apps used in the lessons
The course software was only part of it. Between 2017 and 2023 I made well over 100 Git repositories for examples, exercises, and projects.
There were spreadsheets, bill trackers, pixel-art editors, e-commerce stores, GitHub clients, blogs, chat apps, peer-to-peer file sharing, Electron apps, an Airbnb clone, a Twitter clone, a Reddit clone, a YouTube clone, a job board, a members area, a project manager, a video conferencing app, and many smaller experiments.

These were not startup attempts. They were working applications I built so students could watch an idea go from an empty folder to something real.
The products that worked
All of this became the first durable product system I built. The tutorials bring people in. The free books help them go deeper. Courses and workshops give them structure, projects, feedback, and a community.
I have now published 1,900+ tutorials, more than 20 programming books, and more than 15 courses. I have taught tens of thousands of students.
Teaching did not replace building. It gave me hundreds of reasons to build, and it forced me to explain what I was learning.
The money, without theater
I do not have exact accounts for every product going back to 2008. I will not invent precise numbers to make this page look impressive.
Here is what I can say from my records:
| Product | Cost | Result |
|---|---|---|
| Login Immediately | About one hour to build | Sold very well. Exceptional return on time. |
| JooCode portfolio | Years of code, support, and maintenance | Thousands of buyers. Some products paid rent; software was my full-time income for periods. |
| iPhone and iPad apps | Countless hours plus Apple's annual membership | Paid the membership and the occasional coffee. |
| Mac utilities | Six products and years in the store | A few sales per week. No meaningful income stream. |
| CommerceKit | A full Joomla-to-WordPress rewrite | A mature market dominated by default extensions. Little traction, and I stopped. |
| GravCart | 321 commits and 22 releases | Real open-source adoption, but not a sustainable business. |
| Gitometer | Two implementations: Laravel, then Go | Could not attract free users. No business. |
| Original Prototyped | Landing page, research, and customer interviews | 1,935 visits, 130 signups, 12 replies. Paused before launch. |
| Blog, books, courses, and teaching platforms | Years of writing, software, projects, support, and repeated rebuilds | Tens of millions of blog visitors and tens of thousands of students. |
Every project here was bootstrapped. No venture capital. No staff hidden behind a personal brand. The main cost was always time.
What the failures taught me
- Some markets are already locked up. WooCommerce and other extensions were the defaults. Nobody was looking for another shopping cart, and I did not have the perseverance needed to break in.
- A clever product is not the same as a useful one. Gitometer was attractive, but it solved no painful problem.
- The market matters. Joomla shrank. My product quality could not reverse the ecosystem.
- Platforms add risk. Music apps disappeared after copyright complaints. API products depend on someone else's rules.
- Maintenance is part of the product. GravCart needed a community or a business strong enough to support years of work.
- Distribution comes before scale. For years I started with code. Today I start with the customer and how I can reach them.
- Small products can have the best return. The one-hour plugin beat projects that took months.