Pientalonmies.fi

Toteutimme pientalonmies.fi räätälöitynä fullstack-verkkosovelluksena.

Pientalonmies.fi on kodin huoltotöiden maksuton tarjouspyyntö­sivusto. Pientalonmies.fi:n kautta niin yksityishenkilöt kuin yrityksetkin voivat kilpailuttaa anonyymisti eri alojen ammattilaisia tekemään esim. remontteja, muuttoja jne jotta sopivin ammattilainen löytyy edulliseen hintaan. Toteutimme verkkopalvelun räätälöitynä verkkosovelluksena.

Tutustu palveluun: pientalonmies.fi

Tarjouspyyntöportaali

Palvelun tavoitteena on yhdistää pienet palveluntarjoajat ja pienemmät asiakkaat (erityisesti yksityishenkilöt). Kysyntää palveluille on paljon, mutta luotettavan tekijän löytäminen on yleensä hankalaa.

Palvelussa asiakas jättää tarvitsemastaan työstä tarjouspyynnön, johon hän saa tarjouksia palveluntarjoajilta. Asiakas voi vertailla tarjouksia (hinta, sisältö, jne.) ja myös yrityksiä (aiempien toimeksiantojen pohjalta annettujen arvostelujen perusteella). Asiakas ja palveluntarjoaja voivat myös keskustella kyseessäolevasta toimeksiannosta palvelun sisäisen keskusteluominaisuuden kautta. Työn valmistuttua asiakas voi arvostella palveluntarjoajan.

Palveluntarjoajat voivat etsiä sopivia tarjouspyyntöjä ja jättää näihin tarjouksia. Palvelu on asiakkaille maksuton, mutta palveluntarjoajat maksavat palvelusta kuukausimaksua.

Projekti alkoi tammikuussa 2023 kick-off palaverilla, jonka pohjalta aloitettiin palvelun vaatimusmäärittely. Määrittelyn aikana myös palvelun keskeiset näkymät ja käyttäjäpolut suunniteltiin rautalankatasolla ja layout-suunnitelmina.

Kehitysvaihe alkoi heti, kun vaatimusmäärittely oli hyväksytty. Staging-ympäristö pystytettiin heti kehitysvaiheen alkaessa, kehitys käynnistyi ketterin metodein. Uusia ominaisuuksia kehitettiin ja lisättiin kokonaisuuteen sitä mukaan kun ne valmistuivat. Iteraatiota tehtiin asiakkaan hyväksynnän ja kommenttien perusteella.

Palvelu julkaistiin lokakuussa 2023.

JavaScript-pohjainen toteutus NestJS:llä

Backendin toteutukseen valittiin teknologiaksi NestJS, joka on vahvasti suosiotaan kasvattanut (ja ilmeisesti edelleen kasvattava)  TypeScript-pohjainen framework. NestJS mahdollistaa nykyaikaisemman tavan toteuttaa verkkopalvelun taustapalvelut (verrattuna perinteiseen PHP-pohjaiseen backendiin) ja on helpompi ylläpitää (sama ohjelmointikieli kuin frontendissä eli JavaScript).

NestJS on myös kattavasti dokumentoitu. NestJS on myös uusille kehittäjille helppo omaksua, koska JavaScript mahdollistaa automaattisen koodin muotoilun (toisin kuin PHP), kansiorakenne on matala, osoitepolut tuottaminen on standardoitu eikä henkilökohtaisten koodaustyylien opetteluun mene paljoa aikaa. NestJS:n avulla palveluun oli myös helpompi lisätä moderneja ominaisuuksia kuten integroitu chat ja maksuliikenne.

API:na käytettiin GraphQL:ää, joka on joustavampi ja modernimpi ratkaisu verrattuna perinteiseen REST API:in. WebSocket mahdollistaa chat-palvelun pyörittämisen frontendissä ja Webhooks maksuliikenteen kommunikoinnin maksuratkaisu Stripe:n ja frontendin välillä.

Tietokanta toteutettiin MongoDB:llä. Mongo perustuu NoSQL:ään, joka on joustavampi ja modernimpi ratkaisu verrattuna perinteiseen SQL-kantaan.

Frontend toteutettiin Next.js -frameworkin avulla. Next.js:n avulla voi tuottaa React-komponentteja standardoidulla tavalla ja optimoida React-komponenttikohtasesti sivun performanssia (eli latausnopeutta), mistä parantaa käyttökokemusta ja mm. hakukoneoptimointia.

Palvelimet ja versionhallinta

Hosting tapahtuu modernissa pilviympäristössä joka skaalautuu automaattisesti käyttäjämäärän mukaan ja jota monitoroidaan jatkuvasti. Asiakas voi myös omatoimisesti hallita pilviympäristöä. Palvelua varten luotiin prosessi kehityksen aikana syntyneen koodin siirtämiseksi pilviympäristöihin, mikä vaati jonkin verran aikaa putken pystyttämiseksi mutta säästää kuitenkin pitkällä aikavälillä aikaa, koska asiakas näkee muutokset muutamassa minuutissa. Tässä hyödynnettiin Verceliä.

Maksuliikenne ja sähköpostit

Maksuratkaisuksi toistuvais-/kuukausimaksujen hallinnointiin valikoitui kansainvälisesti suosittu Stripe, joka mahdollistaa rahaliikenteen integroinnin mihin tahansa palveluun suhteellisen pienellä vaivalla, maksuliikenteeseen liittyvien vastuukysymysten osittaisen ulkoistamisen ja sen, että asiakas voi seurata ja hallinnoida palvelun rahaliikennettä omatoimisesti.

Sähköpostien lähetykseen käytetään Brevoa. Kyse on ”transactional emails” eli sähköpostien ohjelmallinen lähetys; Ei siis markkinointikampanjoita vaan esimerkiksi sähköpostin vahvistusviestejä. Brevo:n käyttäminen mahdollistaa valmiiden sähköpostipohjien hyödyntämisen niiden ulkoasua suunnitellessa, suuren sähköpostimäärän lähettämisen ilman, että sähköpostit päätyvät roskapostiin ja sen, että asiakas voi hallinnoida siihen liittyviä asioita omatoimisesti.