Skip to content
FLAVIO COPES
flaviocopes.com

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.

Linux Hideout, the Italian Linux website I helped publish in 1999
Linux Hideout, 1999. My first published project.

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.

JooCommerce storefront and cart interfaces in light and dark themes
JooCommerce storefronts and shopping cart.

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.

Code Snippet, my Mac app for organizing source code snippets
Code Snippet, a commercial Mac app built with Ember.js.

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.

GravCart, the open source shopping cart plugin I made for Grav CMS
GravCart: open source core, commercial add-ons.

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.

Gitometer visualizing stars, commits, and the history of a GitHub repository
Gitometer. Interesting technology, weak demand.
~~~

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.

A Twitter-style application I built as a JavaScript Bootcamp project in 2020
A Twitter-style app built for the 2020 JavaScript Bootcamp. One of more than 100 archived teaching projects.

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:

ProductCostResult
Login ImmediatelyAbout one hour to buildSold very well. Exceptional return on time.
JooCode portfolioYears of code, support, and maintenanceThousands of buyers. Some products paid rent; software was my full-time income for periods.
iPhone and iPad appsCountless hours plus Apple's annual membershipPaid the membership and the occasional coffee.
Mac utilitiesSix products and years in the storeA few sales per week. No meaningful income stream.
CommerceKitA full Joomla-to-WordPress rewriteA mature market dominated by default extensions. Little traction, and I stopped.
GravCart321 commits and 22 releasesReal open-source adoption, but not a sustainable business.
GitometerTwo implementations: Laravel, then GoCould not attract free users. No business.
Original PrototypedLanding page, research, and customer interviews1,935 visits, 130 signups, 12 replies. Paused before launch.
Blog, books, courses, and teaching platformsYears of writing, software, projects, support, and repeated rebuildsTens 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.