Wordle har blitt mitt “Go to”-hobbyprosjekt når jeg skal lære nye rammeverk og teste nye ting: I 2022 bygde jeg Wordle på norsk med React og NextJS, i år ville jeg starte på nytt med Vue og Nuxt, men denne gangen med Wordle på fransk.
Jeg studerte ett år i Frankrike, og tenkte dette var en fin måte å vedlikeholde fransken min.
I juni klarte jeg få fingrene i det perfekte domenet, og tiden var inne for å lansere Le Mot. Navnet betyr “ordet” på fransk, og har blitt synonymt med Wordle i Frankrike grunnet flere franske Wordle-kloner med samme navn.
Jeg tenkte ikke stort på navnvalget, og kjørte lansering.
"Plagiat!"
Første dagene var det naturligvis lite action, og jeg begynte å bli utålmodig.
Det kan ta lang tid å slippe inn i varmen hos Google, så jeg tok til Twitter for å gjøre franske Wordle-entusiaster oppmerksomme på denne nye og forbedrede franske versjonen av Wordle.
Etter noen travle dager på jobb hvor jeg ikke viet Le Mot noe oppmerksomhet, oppdaget jeg plutselig at appen hadde gått semi-viralt på Twitter, og kanskje ikke av grunnen jeg hadde ønsket:
En konto med over 50.000 følgere hadde plukket opp lanseringen min, og slengte ut påstander om at jeg har plagiert koden til et open source-prosjekt.
Hatmeldingene strømmet
Dette stemte selvfølgelig ikke:
Jeg hadde sittet lange kvelder i flere måneder og skrevet alt fra bunnen av. Jeg så ikke på kildekoden til prosjektet han siktet til, men jeg likte designet, og hentet inspirasjon fra det når jeg bygde min egen versjon.
Enhver utvikler med kjennskap til Chromes devtools, kan enkelt se at mitt prosjekt, som består av Vue, Nuxt, Typescript og TailwindCSS, ikke bærer noen som helst likhet med open source-prosjektet.
Jeg bygde også nye features, som støtte for 4- og 6-bokstavers ord, muligheten til å lage dine egne Wordle-utfordringer du kan sende til venner, utvidet arkiv-funksjon hvor du enkelt kan spille alle tidligere ord, og ikke minst muligheten for ubegrenset spill av 4, 5 og 6 -bokstavers ord.
Ingen på Twitter hadde lagt merke til dette, og hatmeldingene strømmet inn.
Forsvar for døve ører
Etter å ha bodd ett år i Paris, har jeg blitt vant til den franske kulturen for konfrontasjon, og tok ikke tilbakemeldingene så veldig personlig, tross alt.
Mine forsøk på å forsvare appen min falt for døve ører. Jeg prøvde å formidle at selve navnet opprinnelig ble oppfunnet av noen andre, og har i realiteten blitt den franske oversettelsen av Wordle. Det finnes også utallige andre franske Wordle versjoner under samme navn.
I utgangspunktet tenkte jeg at det var innenfor å ta inspirasjon fra et hobbyprosjekt til et annet. Tross alt er det ikke snakk om kommersielle apper, og begge er kopier av den originale versjonen av Wordle.
Gjorde endringer
Men, tilbakemeldingen gjorde inntrykk:
Jeg implementerte noen designendringer, hvor min app benytter seg mer av sirkler enn firkanter, og la til informasjon om at mitt prosjekt var visuelt inspirert av dette open source-prosjektet, med en link til forfatterens Twitter.
Jeg vurderte å fjerne de fargede forbokstavene, men med mine egne farger og sirkler tenkte jeg at det får stå så lenge jeg kreditterer hvor inspirasjonen er hentet fra.
I dag står tweeten på 36.000 views og 140 likes, og trafikken på Le Mot plukket seg opp betraktelig etter all publisiteten.
Dette API-et er hemmeligheten bak Wordle sin suksess
Hater appen, men...
Open source-miljøet i Frankrike hater appen min, men alle som bruker den hver dag gir gode tilbakemeldinger, og virker til å sette pris på alle de nye funksjonene jeg laget.
Og ikke alle kan si de har et hobbyprosjekt som har blitt truet på livet.
Forøvrig anbefaler jeg alle å lage en Wordle-klon, om du trenger et lite prosjekt for å lære et nytt rammeverk. Det er en perfekt øvelse i å optimalisere en enkel app som på mange måter kan ende opp med å bli ganske kompleks.
Hvordan skal du laste de store ordlistene uten å påvirke FCP? Hvordan skal du sjekke løsningen uten å avsløre noe i koden? Hvordan skal du generere historikk og statistikk? Skal du bruke en database eller enkel klient-side lagring? Utfordringene er uendelige.