Cyril

Cyril

@cnicodeme.com

Indie hacker building GetFernand.com and PDFShift.io from Belfort, 🇫🇷

300 followers367 following215 posts

I find the analogy between programmers/AI and farmers/tractors exactly on point. Those that refuses to move to the more efficient - easier to work with - new tools available, and those that are excited and ahead. Yeah... Guess which sector has the highest suicide rate ?...

What the fuck is going on with captcha systems ? Know that AI is taking over, it feels more and more like anti-human security checks. 5 tests checks later, the verification failed, obviously ...

Cyril reposted

Cyril and I sat together during our last offsite and set a simple goal: reach $100k MRR in 2026 with Fernand, just the two of us. Zero hiring, like the good old days when we got started in his parents basement. It sounds crazy ambitious, but the way we work makes me think it could be realistic.

I have these two comments in the db table, and had to increase the size because of Lemon Squeezy. Today, we had to increase these once more because of LS, that provide a 1033 chars long access token. At this rate, we'll soon have to change the type to LONGTEXT ... 🤦‍♂️

Y aurait-il quelqu'un avec un abonnement "Les Echos" qui aurait la gentillesse de me partager un article payant ? N'hésitez pas à me contacter en réponse ou par dm, merci :)

@mitsuhiko.at Hi Armin, I saw your blog today (coming from a link on HackerNews about 996) and I was wondering what are you using for writing your blog ? Is it custom made or a public library/service ? Thanks!

The kind of bug I hate the most!! Selecting the first option set the value to "null" (expected behavior) Remove the empty comment, and selecting the first option set the value to "Browser detection". ...wtf ?

The kind of bug I hate the most!! Selecting the first option set the value to "null" (expected behavior) Remove the empty comment, and selecting the first option set the value to "Browser detection". ...wtf ?

J'adore. Sur le site des impôts, le paiment des divers taxes se fait en un clic. Mais quand il faut faire une demande de remboursement (TVA), d'un coup, le service devient amnésique ...

Cyril reposted

Replying to @antoineminoux.bsky.social

Today we're launching our biggest AI update yet: → Custom AI training → Optional AI chat agent → Smarter replies, everywhere you work You can train Fernand with up to 10Mb of your own content: Scraped website, docs, saved replies, PDFs, past conversations.

I spent this whole week implementing an AI chat system for @getfernand.com. The first iteration used the chat completion, but would not provide any answers if the data wasn't present on the vector store (rag).

View full thread

My tests so far are way better and the responses are faster. It can detect when the customer wants to talk to a human, which in turn triggers an even to notify the team (instead of keeping the exchange silent to avoid bothering for nothing). You can test it on getfernand.com.

getfernand.comFernand — The fast, calm customer support platform for SaaSFernand is the best customer support software for SaaS businesses. Blazingly fast. Keyboard shortcuts for everything. Designed to be calm.

We'll soon work on a UI to allow our users to add their data to their own store (website, documents, etc) to improve the quality of the AI agent, but I'm excited of the current result we have. What's great is that having this new feature doesn't change the price of Fernand :)

I spent this whole week implementing an AI chat system for @getfernand.com. The first iteration used the chat completion, but would not provide any answers if the data wasn't present on the vector store (rag).

View full thread

So today, I reverted most of the code to the chat completion, but I learned from the past two days to increment from my initial try, and improve the system A LOT more. Now, it respond to the initial messages (Hi/hello) and handles the RAG perfectly while keeping the past exchange to iterate over.

I spent this whole week implementing an AI chat system for @getfernand.com. The first iteration used the chat completion, but would not provide any answers if the data wasn't present on the vector store (rag).

View full thread

I then realized that the RAG only had the articles we wrote on the knowledge base, and it wasn't enough based on the initial basic question we threw at the bot. So I wrote a website scraper to retrieve data from our customer's website in order to increase the responses's quality.

Since the interation wasn't great, I decided to rewrite the whole code logic to use the OpenAi assistant, hoping it would be more friendly and verbose. It worked okay, but brought a few other issues; You can't select which files to use in the vector store and you need to load each file's metadata.

I spent this whole week implementing an AI chat system for @getfernand.com. The first iteration used the chat completion, but would not provide any answers if the data wasn't present on the vector store (rag).

So any messages at the beginning - such as "Hi"/"Hello" - wouldn't be answered, and if there was no data in the vector store (RAG), it wouldn't respond neither. This resulted in a chat where you would sometime have a message, sometime not, and it was really odd to interact with.

"Good news! The disputed payment from December 26, 2024 for account [redacted] was successfully resolved in your favor by the customer’s bank or card network."

Stripe support is getting really bad these days. I can lookup on their knowledge base. If I'm reaching out to them, it's because my issue is not present on basic KB articles.

I don't understand the interest for a wireless keyboard. Not having a visible cable doesn't compare to the benefit of not having a battery (that will ultimately need to be plugged to be charged, defeating the original purpose of "wireless")

Cyril reposted

Cyril reposted

Today, we're releasing Shared drafts, a feature transforming how product teams collaborate when replying to customers. It's perfect for founders delegating their inbox to VAs or working with support agencies 🚀

Just wrote the new version of base64, which is now base65. Tomorrow, I plan to write the new version of the hashing algorithm, sha513. Stay tuned

I like a good technical challenge. Right now, I'm trying to scrap a Gitbook documentation website, and this is really tricky. They rely on NextJS with SSR, which requires me to use Playwright, and they use Tailwind, which makes class-based parsing almost impossible. But I'm making some progress!