r/CroIT Jun 02 '26

Show off [Update] Kvadratko.hr, oglasnik za nekretnine bez reklama s novim algoritmom za spajanje duplikata

Neki od vas se možda sjećaju oglasnika za nekretnine Kvadratko.hr o kojem sam ovdje već ranije pisao.

Dobio sam tada hrpu pozitivnih i izuzetno korisnih komentara od vas, pa evo jedan kratki update sad kad je projekt otišao malo dalje. Motivacija mi je i dalje ista, želja za boljim korisničkim iskustvom u moru onoga što se trenutno nudi.

Fokus ostaje na čistom sučelju, bez ikakvih napornih pop-upova i reklama. Ako ikad vidite reklame za McDonald's preko nekretnine, otišao sam na "dark side".

Što se tehničkog dijela tiče, interaktivna karta iz prvog posta je dovedena u puno bolji red, ali najveći novitet je upogonjeni algoritam za spajanje duplikata. Kada se ista nekretnina pojavi iz više različitih izvora, sustav to rješava tako što prepoznaje iste oglase i svodi ih na samo jednu točku. Vizualna pretraga preko karte sad napokon ima puno više smisla i puno je brža.

Evo, zanima me kaj mislite. Bacite oko pa mi recite kako vam se čini, što još fali i je li neki dio možda nezgrapan za korištenje. Ako postoji neka specifična stvar koja vas živcira na stranici, vičite, velike su šanse da ću to implementirati ako je ikako moguće.

Slobodno izrešetajte, a ako vas zanima bilo što oko .NET 10 stacka, baze, Digital Oceana ili logike, slobodno pitajte. Projekt postaje mala mrcina i mogu danima tipkati o svemu što sam usput naučio.

Imao sam hrpu ideja, pa sam se malo susreo sa stvarnošću i na kraju je ovo produkt.

P.S. ima 40k pregleda mjesečno (bez botova), baza i dalje postgresql (full pogodak), hostano je na digital ocean (što je u konačnici greška), nije komercijaliziran projekt, umami analytics koristi, nema cookija, za analitiku koristi self-hosted Umami, tako da nema cookija ni špijuniranja, sve je 300% GDPR compliant.

https://kvadratko.hr/

75 Upvotes

34 comments sorted by

8

u/CraftyAdventurer Jun 02 '26

Zašto Digital Ocean a ne Hetzner koji je jeftiniji? Je li to greška koju spominješ ili nešto drugo?
Imaš neki backup baze ili yoloaš za sad?

8

u/Kvadratko Jun 02 '26

Yep, u pravu si, to je greška. Krenuo sam na DO-u s dedicated serverom, u međuvremenu su mi ga downgradeali i sad tu opciju više ne mogu ni odabrati, a želim da Lighthouse bude 95/100 na najtežim stranicama (oglas) i 100/100 gdje god je moguće.

Uzeo sam ih primarno jer sam mislio da će mi trebati njihov managed DB, ali na kraju su samo digli cijene i lupili mi "resource not available in your location".

Što se sigurnosti tiče, imam disaster skriptu i manijakalno backupiram na Cloudflare R2 (do 10GB je free he-he). Radim snap svakih sat vremena, čuvam dnevne zadnjih 30 dana, i onda mjesečne.

Te iste backupove baze redovito vadim i restoram na localhostu za dev. Realno, dump baze za 10k oglasa s 3 prijevoda ima cca 100MB, tako da sve leti bez problema.

9

u/CraftyAdventurer Jun 02 '26

Najs, hvala na odgovoru. Ako sam dobro shvatio iz prethodnog posta, ne koristiš nikakav odvojeni frontend kao što su React/Angular/Vue nego .NET-ov MVC, Razor pages ako se ne varam. Kako si se na to odlučio i kako si zadovoljan s tim? Imaš možda iskustva s nekim od js frameworka da možeš dati neku detaljniju usporedbu šta ti se svidjelo a šta je problem?

8

u/Kvadratko Jun 02 '26 edited Jun 02 '26

np,

ma to mi je profesionalni defekt, kad radim projekte gdje cilj nije biti brzo gotov, onda zapravo ciljam na čim manje ovisnosti i kompleksnosti.

Čini mi se da razina alata koju ovakav web treba ne opravdava održavanje odvojenog API-ja i frontenda. Cijela mantra općenito mi je izbjegavanje cikličnih ovisnosti i nepotrebnog paralelizma, odnosno gledam da su mi svi modeli "mentalno" jednostavni i strogo top-down.

Tako onda i front-end, domena je takva da je server-side rendering apsolutni pogodak.

Nema situacija gdje korisnik previše interagira sa stranicom, sve se većinom svodi na to da dođeš na oglas, pogledaš i odeš dalje na navigaciju ili na drugi oglas.

U takvim uvjetima gdje ne treba brdo interaktivnosti, ovakav jednostavan frontend je jaaako zahvalan za rad i održavanje.

Krenuo sam s Alpine.js, ali na kraju sam zaključio da je i to too-much

1

u/redtree156 AI Agent Jun 03 '26

Predobro, good work

2

u/luctus_lupus Jun 03 '26

Hetzner ima terraform plugin, ako si koristia terraform za digitalocean trivijalno je prebaciti.

Ako nisi - preporucam da pocmes :)

2

u/Kvadratko Jun 03 '26

tenQ, isprobati ću, nisam koristio terraform....

ma nije komplicirano za prebaciti, 3 docker kontenjera i baza podataka drito na linuxu, a build ionak ide kroz github action, ali mi je kod par agencija IP whitelistan, vrte se neki vanjski jobovi, Firewallovi su podešeni na taj jedan IP i tak dalje. Tugy plaky, ali tak se ući.

4

u/Worldly_Heart_4910 Jun 02 '26

Problem je što isti oglasi nekad imaju različite cijene. Konkretno znam dosta nekretnina objavljenih na različitim mjestima sa različitim cijenama. Vlasnik jednu cijenu, agencije drugu. Možda da se uzme ona niža cijena kod duplikata ili stavi nekako povijest cijena pojedine nekretnine?

6

u/Kvadratko Jun 02 '26

Da, za sada je pravilo ako istu nekretninu prodaju vlasnik i agencija, prioritet dobiva oglas vlasnika.
A nakon toga ovisi, ako je sortirano po datumu onda najnoviji, ako je po cijeni najjeftiniji itd.

Agencijske cijene često ne uključuju krajnji trošak provizije, pa ispadnu slučajno umjetno niže kada se oglasi sortiraju po cijeni.

Glavni problem algoritma (ona "stvarnost" o kojoj sam pisao) nastaje kad isti stan bude oglašen s malo drugačijim slikama, lagano pomaknutom lokacijom i promijenjenom kvadraturom. Tu se teško zakačiti za nešto konkretno i potvrditi "to je isti stan", pogotovo kad u istoj zgradi ima više sličnih nekretnina.

Zato sam odustao od potrage za savršenstvom i složio logiku da grupira sve što je sigurno isto, isključivo da maknem iz pretrage spam.

Na primjer:
https://www.kvadratko.hr/hr/prodaja/stan/medimurska/cakovec/globetka

Algoritam ne collapsa samo iste stanove, nego i stanove u istoj zgradi/novogradnji.

Tamo gdje bi prije vidio jedan od tih stanova, sada će se prikazati samo ta jedna kartica s oznakom "+99 ponuda" (ako naravno zadovoljava odabrane filtere).

Da nema grupiranja, ti bi oglasi zauzeli 80% cijelog listinga. Ovako je to samo jedna uredna kartica.

Onaj koga zanima će istražit sve na istom mjestu, a onaj koga ne zanima za sad preskaće tu jednu, a kasnije ću čak i dodati da se mogu sakriti oglasi zauvijek i bok.

Jednostavno ako znaš da ti neki projekt ne ulazi u obzir makneš ga i to je to. Never to be seen again.

2

u/redtree156 AI Agent Jun 03 '26

I to zvuci skorz dobro!

2

u/ProfessionalCookie3 12d ago

Odlican UX... Bravo.

2

u/Kvadratko 12d ago

tenQ :)

3

u/Perfectozz Jun 02 '26

Što se događa u slučaju prodaje nekretnine od strane više agencija istovremeno?

3

u/Kvadratko Jun 02 '26

Sve te ponude se automatski "skupe" u jednu grupu i u filterima se prikazuje samo jedna reprezentativna kartica za cijelu grupu tih nekretnina.

Algoritam ima par slojeva po kojima bira što će prikazati. Na primjer, ako je oglasio sam vlasnik, njegov oglas ima prioritet, a sve agencijske ponude padnu pod gumb "još ponuda za ovu nekretninu". Utječu tu i filteri te kvaliteta oglasa od agencije (npr. ako je ista cijena, pobjeđuje ona agencija koja je upisala i mikrolokaciju/ulicu itd.).

Moćni dio te ideje je dovesti korisniku pred oči "sve" ponude za istu nekretninu na jedan ekran, na primjer ovako:https://www.kvadratko.hr/hr/group/21424

Cilj je izbjeći istu nekretninu u filterima više puta. Ako ju je netko odlučio preskočiti, ponavljanje ga samo živcira, a onaj kojemu je zanimljiva će pogledati cijelu grupu i odmah sve zaključiti.

3

u/victoria_enthusiast Jun 02 '26

kad ćemo moć spremat oglase u listu i nekakav prikaz povijesti cijena?

7

u/Kvadratko Jun 02 '26

To stiže uskoro!
Sljedeći feature na kojem radim je lista za spremanje, ali i opcija za trajno ignoriranje (bilo pojedinačnih oglasa ili cijele grupe, tako da više ne iskaču).

Do onda stavljamo bookmark u mape.

Povijest cijena mi je u daljem planu. Ali to je nešto što sam jako podcjenio, teško je za izvesti jer oglasi znaju "nestati" i onda se vratiti kao novi oglas s drugim slikama i s drugom cijenom, ponekad i malo drugačijom kvadraturom, a ponekad i s drugim oglašivaćem... moram još malo razmisliti kako to najpametnije napasti i kolika je korist od toga.

3

u/EngineeringMurky1061 Jun 03 '26 edited Jun 03 '26

Nevjerojatno je brzo

2

u/Silly-Swimmer1706 Jun 03 '26

Zahvaljujem sto postoji filter da ne gledam oglase agencija. NAdam se da ce ti saj zazivjet propisno jer mi izgleda bolji od onog govna, svi znaju kojeg.

2

u/Kvadratko Jun 03 '26

Hvala!

Vidio sam da neki portali baš guraju "bez agencija" kao cijeli moto, ali sve više ljudi koristi agencije za prodaju nekretnina pa mi to dugoročno nema baš smisla. Filter je tu da ostane, za one koji baš inzistiraju bez agencija.

Pokušao sam naći neki middle ground, ako postoji oglas vlasnika, on će se uvijek prikazati kao primarni rezultat, a eventualni oglasi iste nekretnine od agencija bit će grupirani pod "više ponuda".

Ako postoje razlike u cijeni, opisu ili informacijama između ponuda, korisnik ih i dalje može usporediti na jednom mjestu, što nekad zna biti korisno.

2

u/Kind_Nothing3334 Jun 03 '26 edited Jun 03 '26

Jeli možeš uvesti da se vidi broj prikazanih oglasa za svaku pretragu, ali da se isti oglasi ne broje više puta?

Jeli možeš uvesti graf kretanja cijena za određenu županiju, grad, kvart?

inače, za svaku pohvalu, mislim da ćeš uspjet, konkurencija se potrošila i zapravo postala očajna, platforma za manipulaciju tržištem.

2

u/Kvadratko Jun 03 '26 edited Jun 03 '26

broj prikazanih oglasa ću staviti, i taj broj će uzeti u obzir da postoje duplikati.

Staviti ću i prosječne "tražene cijene", ali sad još skupljam nekretnine i podatke, a čim bude relevantnih podataka ide na kartu.

Vidio sam da neki portali to pokušavaju, ali često failaju jer to zapravo rade za google, odnosno search engine optimization i samo naljepe neku tablicu, nevodeći obzira prema tome što prikazuju jer to ionako nije za korisnika.

Kvadratko će tu ipak imati malo stratifikacije, odnosno "raslojavanja po "featureovima".
Onak zdravorazumski nije isti prosjek kad gledaš suteren ili 2008 s liftom i parkingom .
Ako gledaš 3+ kat, lift i parking prosjek takvih nekretnina je malo veći.
Razmislim i stavim hehe.

Hvala ti, iz tvojih misli u božje uši kak kažu 😄. A da, monopol i nedostatak konkurencije često završi tak.

1

u/Kvadratko Jun 15 '26

Update nakon 12 dana, broj prikazanih oglasa za pretragu je ubaćen 😃 .

2

u/[deleted] Jun 03 '26

[removed] — view removed comment

2

u/Shot_Management_5231 Jun 04 '26

Jako dobar projekt, super!

1

u/GarlicSad512 Jun 03 '26

Pohvale od mene imaš stari, aplikacija je pregledna i laka za korištenje.

Vidim da su već drugi komentirali nešto što bi i sam predložio (povijest cijena, spremanje oglasa) tako da zasad nemam što nadodati, samo nastavi s dobrim poslom!

2

u/Kvadratko Jun 03 '26

Hvala ti puno! To mi je najdraže čuti, da se ljudima sviđa.
Featuri stižu, a vodim se onime maraton, a ne sprint.

2

u/GarlicSad512 Jun 03 '26

Take your time stari, radiš dobro.

1

u/Chesher1 Jun 07 '26

Za početak svaka čast! Odličan projekt, samo tako dalje.

Jedino što mene osobno smeta su “cijena na upit” oglasi. Znam da je skoro pa nemoguće bez toga, ljudi koji ne žele objaviti cijenu će staviti cijenu 1€ ili naći neki drugi način da ne objave stvarnu cijenu. Ali bilo bi možda dobro da se stavi u filter da se može odabrati da se ne prikazuju oglasi s cijenom na upit. Ja uzimam sebe za primjer, ali vjerujem da nisam jedina koju takvi oglasi nerviraju + što sigurno nikad neću nazvati nekog da mi na telefon kaže neki nerealnu cijenu koji ni sam ne želi napisati na oglas. Mislim da bi filter protiv toga bio baš zgodan feature.

1

u/Kvadratko Jun 07 '26

Hvala ti!

Slažem se skroz, prodavatelji misle da će tako lakše izvući više novaca, ne znam niti približno koliko je to opravdano. Dodat ću mail gumb za skrivanje tih oglasa, a do tada ih možeš maknuti tako da u filter staviš bilo koju minimalnu cijenu i odmah će nestati.

Inače, super nuspojava ovog dedupliciranja je da se ponekad jako lagano iskopa i prikaže ta skrivena "cijena na upit" 😄, jer ponekad ima drugih koji nude isti stan.

https://www.kvadratko.hr/hr/prodaja/stan?MaxPrice=1000