i build stuff.
my name is Theo
My name is actually Théophile. Three syllables that sound like [thé - eau - fil] in French and translate to [tea - water - wire] in English. Now you know ☺
I'm a Software Engineer with a decade of experience and three startup adventures as a founder and CTO.
My happy place is in crafting nifty web applications using ClojureScript/JavaScript and cooking up smart contracts on EVM blockchains with Solidity.
From dreaming up project architectures to writing code solo or jamming with a team, from giving your project a security audit to waving the magic wand for a smooth production launch, I'm your go-to tech wizard.
Available up to 3 0 days a week (gmail: theophile.villard).
Here's a list of the projects (big ones in bold) I've been working on over the years:
Sell Gods Unchained cards instantly for GODS.
As an active participant in Gods Unchained marketplaces I saw the need for an "instant sell" product.
As always it looked like an easy two-day project, but took way longer...!
SvelteKit (Fullstack JS), Vercel, ImmutableX
GameFi is really interesting and probably the best reason for being bullish on crypto
My digital art gallery.
Needed an excuse to build an app with the web4th framework. I like to draw so I decided to build my own art gallery.
I hit all the possible roadblocks with this app. Bugs in libraries, breaking changes, blockchain support, etc.
web4th stater kit (ClojureScript), ZeroDev (Account abstraction), Solidity (NFT 1155), Polygon
I'm happy with the article and the app. It's still v0 but the built-in support of a web4th app is buttery.
Meeting for coffee? Sign a contract.
Was brainstorming silly ideas to try this new Clojure "framework". Thought about coffee meetings.
The name is a nod to all the YouSign, DocuSign, and HelloSign of this world
Electric (Clojure dialect), ChatGPT (contract content), hosted on Fly
Got excited about 1/ removing template-creating lawyers and 2/ removing frontend-backend separations.
Invest daily in top Gods Unchained cards automatically.
As a Gods Unchained player and believer, I wanted a way to passively invest in GU cards.
Posted it on GU's reddit and got banned because they thought it was a scam
Node.js, ImmutableX sdk, cronjob.org, hosted on Glitch
I'm considering making it open source so that anyone could run their own bot.
Use your bank account as a crypto wallet and buy into DeFi.
Discovered Monerium and had to dig deeper. The best way to go from EUR to crypto.
The architecture is quite weird with the frontend opening a websocket to Cloudflare to open a websocket to Monerium
Svelte, Monerium, Cloudflare workers, Polygon, Uniswap, DPI
This was a POC but I'm glad I could show the potential of Monerium.
Smart contract security audits.
Decided to get better at understanding Solidity and went into competitive security audits.
It's a very cool way to discover promising projects before they get released!
Solidity, Foundry, reading a lot of codebases 😮💨
I definitely got better at Solidity, but didn't manage to reach a profitable level. Auditing is fun but building is better.
MEV (Maximal Extractable Value) on EVM chains.
What a weird world. But a world where there's no room for approximation. You have to be the absolute best to get a chance.
Ironically one of the most profitable trade was a manual one (buying/selling one NFT)
Solidity, Forge, Flashbots, Cloudflare workers, Blocknative
After fighting in the mempool for a few months I decided to pause that activity because of low volume (was doing mostly NFT arbitrage and liquidations).
Coliving powered by crypto.
Coliving is the future. And it would have been a perfect use case for crypto in the real world.
We came up with the acronym WAGBAC: We're All Gonna Buy A Casa
Webflow (low-code), Solidity (NFT mints), ipfs (art), re-frame
Hopefully a project like this happens in the future. Coliving as a public good ♥
web4ᵗʰ: the temporal web.
This was one of the main topic for my sabbatical. The idea was to add time as a new dimension on the web.
Got a lot of interactions when I published the article, but none when I released the starter kit
re-frame, matrix protocol
I'm still convinced that this is a superior format. It's up to me to convince more people now.
Bribes for Curve voters.
Welcome to deep DeFi. My friend working at mStable had the idea to build an on-chain bribing platform for Curve voters.
The one and only André released his version before us
Solidity, Vyper, Hardhat
Transparent bribing is an interesting concept. But I now feel DeFi went a bit too far...
Visualize your Argent guardians.
Argent is one of the best way to self-custody crypto with their guardians. But I wanted a way to see guardians as a graph and to assess its robustness.
Nobody cared about this project
re-frame (cljs), cytoscape (graph), PageRank (ranking)
Graph theory is not so straightforward.
Enzyme adapter for PoolTogether.
I've always been a fan of PoolTogether (no-loss lottery) and the integration was missing on Enzyme. I put together a proposal to build it.
Two years later the frontend is still not showing that integration
Solidity, Hardhat
Getting to know an intricate set of smart contracts was a good challenge.
On-chain crypto hedge fund.
I had a group on Messenger where I gave crypto tips. I decided to turn it into a proper fund thanks to the Enzyme platform.
In 2021 I got elected to join the Enzyme Security Council
Enzyme finance (no-code)
I accepted 35 depositors into the fund. Now trying to be ready for the bull market of 2023 ☺
Minimalism: I've got 99 items.
Towards the end of the first lockdown I started making a list of all the items I owned. Minimalism FTW.
In 2023 I'm still travelling with the same backpack and suitcase
Airtable (no-code)
The list is definitely not up to date as I'm using objet.cc now.
Improving CryptoTwittos.
Still locked down and bored. Wanted to re-launch CryptoTwittos (see below) with a better architecture (NFT support).
I chose to use a retro windows98 design, and that's how I discovered this retro mac design
Solidity, re-frame
My life became literally 100% crypto during the first lockdown. I got overwhelmed and didn't release it.
MEV: buy on TokenSets, sell on 1inch.
This was covid time, working with an ex-colleague. I came up with the design: flashloans on Aave, auctions on TokenSets, trade on 1inch.
This was before MEV was called MEV
Solidity, Aave, TokenSets, 1inch, node.js
Flashloans are fascinating. This concept doesn't exist in the legacy world, only in Crypto.
Conference talk: streaming parens.
Gave a talk in London at a Clojure conference. Built a small app for the occasion to showcase the power of serverless architecture.
I got complimented on this talk for being fun but interesting
Fullstack ClojureScript (re-frame and Node), Firebase, GitHub actions
Was the first time using GitHub actions. I was impressed.
Crypto wallet for companies.
Started working with eFounders on this project. Then onboarded a cofounder. We did YC in the summer of 2019. We raised millions.
The YC experience was unique: https://medium.com/multis/how-was-yc-1954b509c645
Fullstack ClojureScript (re-frame and Node), Firebase auth-db-storage-hosting, TheGraph, ethers.js etc.
The company is still going. I left in 2021 as this was not working with my cofounder anymore.
Social network for movie recommendations.
Got in touch with two business guys who needed a tech person to build this app. Idea made sense.
This was just when the Cambrige Analytica scandal happened
Cycle.js, Messenger sdk, Firebase, Movies API
Building a Messenger bot was interesting. But I would not work again with people without technical knowledge.
Own Twitter accounts, on the Ethereum blockchain.
I was going all-in in crypto and had just finished an Ethereum course. Wanted to get my hands dirty and build something that would make sense on-chain.
Managed to get more than a thousand transactions when I launched it
re-frame (ClojureScript), web3.js, Etherscan and Twitter API
Users would collect and steal (virtual) Twitter accounts from each other. Fun time.
Mining rig to provide hash power.
I got the idea of getting into crypto mining. We built a mining rig with a friend who kept it in his attic. Converting electricity into coins.
At the beginning it felt like printing money, then not so much...
6 GPU cards (sorry gamers)
Hardware is such a mess. Very hard to debug. Thank god I'm mostly in software.
Slack game to get better at knowing your coworkers.
This was a warm summer in Corsica and we had just read a book about "Chatbots". With my gf we built that Slack app following those bot principles.
It was the first time I made it to the first page of hacker news (with the article)
Node.js, botkit framework, Firebase, hosted on Glitch
First serious attempt at conversational interfaces. Something felt right about it.
Game: how many mountain ranges in the Alps can you recognize in 42 seconds?
This was a fun side project when launching the summer version of Booctin (see below). The goal was to build something that could drive organic traffic to us.
I didn't get better at knowing my mountain ranges though
re-frame (ClojureScript), clojure.spec, Firebase
One of my favorite codebase. So clean ♥
Find the perfect spot to hang out with your friends according to your positions.
Inspired by Bornycentre (see below), I built this more useful tool with my gf. Finding a good spot to meet in the middle is never easy.
I know people who were using it to find bars for their Tinder dates
Rum (ClojureScript), Firebase, Foursquare
Crazy that Foursquare was such a big thing.
Ski instructor booking platform.
A childhood (mountains) friend had the idea to try and modernize the ski instructor booking business. We quit our jobs and started Booctin.
The name was initally [Booctin'] but nobody got it right so we courageously rebranded to [Booctin]
Clojure backend, ClojureScript frontend (re-frame), Firebase, Algolia, Stripe, Material UI, OneSky
We managed to get bookings but only by paying Google Adwords. We failed at the SEO game and had to close the company.
Learn to type fast with Type Letter.
This game was only built for me to try and use core.async. I needed an excuse to play with timeouts.
Put your mouse over the top right corner of the screen (over the GitHub mascot)
Reagent, core.async
Old Clojure code always works well. Go play with it and tell me your score.
Marketplace to exchange Eurostar tickets.
Working with a friend at LifeWorks. We wanted to create a way for people like us to buy or sell Eurostar tickets which could be very expensive.
We were often going on Sundays to an italian place in Clapham to work on stuff
Reagent (Clojure)
We never released it.
Find the place that represents the (iso)barycentre of the cities where you lived at least 9 months.
A very random idea. I don't remember why I built it but I still like it. Discovered Cycle.js at a conference in Bratislava and wanted to try it.
Mine was here: https://www.google.com/maps/place/46.34422333333333,2.6112949999999997
Cycle.js
Trying to get that viral loop by letting people easily share their Bornycentre on Twitter.
Coding interview for JavaScript developers.
I was trying to hire JavaScript developers for the company I was working for. I created this small test to help me assess them.
Only 1 in 40 candidates who took the test was able to get everything right
JavaScript
Still ugly JavaScript, but that tail-recursive one-liner for question 8 is my favorite.
Game: find the 8 hiding between 9s.
A friend built this mini game in JavaScript. Another friend re-wrote it in React. It was time for me to prove that Clojure and Reagent were better options.
The game was previously hosted on Heroku (RIP), now on Replit
Reagent (Clojure)
This was the beginning of a long love story with Clojure on the frontend.
Showing parking spaces on a map.
Another coding interview. Decided to use all the cool tech of that time. The goal was to display and interact with parking spaces on a map.
After submitting my work I never heard from them. I didn't want the job so I dropped it :shrug:
React, Immutable.js, Velocity, JS Standard code style
Coding interviews can be annoying but they also are great to make you build something.
Calendar app.
Applied to join The Facebook in early 2015. The first challenge was to build some kind of calendar app in JavaScript.
I passed that test but got rejected after the in-person whiteboard interviews
vanilla JavaScript, and some React
Facebook was really cool at the time. My carreer path would have been different. Glad it didn't happen.
Relaunching Tradixo. Kind of.
With Tradixo shutting down I still had all the translations people contributed on the platform. I built an interface to search through all of them.
I built it while staying in Sofia for my first solo-travel experiment
React, Parse, Foundation, webpack
It was my second React project. I knew this was the future. Unfortunately I had just accepted a Angular job ☹
Photos of London BBQs on a map.
Just wanted to try out things. Using Instagram's data and Google Maps.
I was moving from Paris to London in September
d3.js, Google Maps, Instagram API
Data was more open at the time.
René Coty tee-shirts.
Working with a friend at Dailymotion. Couldn't think of a better idea than selling tee-shirts with René Coty on them. Merci à toi, René.
We spent more money on the domain name (renecoty.io) than we made in sales
No code
René Coty is a French private joke made famous in the movie "OSS 117". The goal was to go viral. It did not happen.
Remote control for Dailymotion playlists.
Working with that same friend at Dailymotion. Wanted to use React.js and peer.js for a company hackathon. We built a webapp that could control a playlist page.
React was really new at the time and people hated on it. I loved it after 5 minutes.
React, Peerjs
10 years later the fundamental idea of React is still the same. Probably time for a new paradigm.
Gamified social translation platform.
Was doing my Erasmus in Madrid. Struggled to get Spanish translations I could really trust. Decided to build a product where users could help each others with translation of short sentences.
Had to convince my engineering school to let me work on that instead of doing an internship
PHP (Symfony), jQuery, MySQL, Redis, Pagodabox
Translation services have been getting radically better in 2023 but nothing competes with asking a native "how do we say __?". Mostly for bad words indeed.
Ubi Ludus Vita.