← Kaikki työt
Toiminnanohjaus + verkkokauppatuotannossa ensimmäisten asiakkaiden kanssa

Korjaamo- ja tukkualusta

Yksi sovellus siellä, missä oli neljä erillistä järjestelmää.

Suomalainen avain-, lukko- ja autosähkökorjaamo, joka myy varaosia myös alan toimijoille. Liiketoiminta pyöri neljän erillisen järjestelmän varassa: vanha verkkokauppa-alusta, kassajärjestelmä tiskillä, erillinen maksunvälittäjä verkossa ja ajanvarausohjelma, johon korjaamon puolelta ei päässyt käsiksi. Kokosimme ne yhdeksi Next.js-sovellukseksi: julkinen varauskalenteri, tilataulu korjaamon televisiossa, kassa juoksevilla kuittinumeroilla, tukkuasiakkaiden tuoteluettelo luottorajoineen, varastokirjanpito, johdon mittaristo, suomalaiset arkipyhät ja hallittu siirtymä pois vanhalta alustalta.

Mitä se tekee

  • Julkinen varauskalenteri: toimipistekohtainen kapasiteetti, aukioloajat ja suomalaiset arkipyhät
  • Seitsemänvaiheinen työn tila televisiotaululla, pakollinen syy pysäytetylle työlle
  • Kassa juoksevilla kuittinumeroilla, alv 25,5 %, päiväkohtaiset summat, CSV-vienti kirjanpitoon
  • Tukkuluettelo luottorajoitetulla laskutustilauksella ja hyväksyntäjonolla
  • Microsoft Entra + Google + Better Auth sekä henkilökunnalle että asiakkaille
Lukkoseppä työstää auton avainaihiota korjaamon työpöydällä

Asiakas pyörittää avain-, lukko- ja autosähkökorjaamoa kuluttajille sekä varaosaluetteloa alan toimijoille. Alla oli neljä järjestelmää: verkkokauppa-alusta, kassajärjestelmä tiskillä, erillinen maksunvälittäjä verkkomaksuihin ja ajanvarausohjelma, jota korjaamon puolelta ei nähnyt. Neljä kirjautumista, ja sama asiakas mallinnettuna kolmella eri tavalla. Verkkokauppa-alusta oli laukaiseva tekijä: sen päivityspolku oli käytännössä uudelleenkirjoitus. Meidät pyydettiin kokoamaan kokonaisuus yhdeksi Next.js-sovellukseksi — julkiset varaukset, tilataulu, kassa, tukkuluettelo, varasto, CRM ja mittaristo — ja siirtämään toiminta pois vanhalta alustalta heidän omassa tahdissaan. Ensimmäinen tuotantojulkaisu meni ulos samalla viikolla kun aloitimme.

Miksi se rakennettiin

Asiakas palvelee samasta korjaamosta kahta yleisöä: kuluttajia, jotka tarvitsevat avaimen, lukon tai autosähkötyön, ja alan toimijoita, jotka ostavat varaosia. Verkkokauppa, kassa, verkkomaksut ja ajanvaraus asuivat kukin eri järjestelmässä. Jokaisella oli oma kirjautuminen, oma asiakasmalli ja oma käsitys siitä mikä on työ. Niiden pitäminen edes suunnilleen synkassa vei työnjohtajan päivän.

Verkkokauppa-alusta oli varsinainen laukaisija. Sen pääversiopäivitys on käytännössä uudelleenkirjoitus, ja kauppaan oli kertynyt räätälöintejä joita kukaan ei enää ylläpitänyt. Pelkkä sen korvaaminen olisi ollut oma projektinsa. Sen korvaaminen ja muun kokonaisuuden rakentaminen samojen asiakas- ja tuotetaulujen päälle oli isompi projekti, mutta ainoa joka ratkaisi ongelman sen siirtämisen sijaan.

Tämä on se toteutus: yksi Next.js-sovellus, joka palvelee sekä kuluttaja- että tukkupuolta ja omistaa varaukset, korjaamon tilataulun, kassan, tukkuluettelon, varaston, CRM:n ja johdon mittariston — sekä siirtymän pois vanhalta alustalta omassa tahdissaan. Työnjohtaja avaa yhden sovelluksen nähdäkseen päivän, ottaakseen maksun, hyväksyäkseen tukkuasiakkaan tai tarkistaakseen kuukauden luvut.

Mitä se ratkaisee

Suunnilleen siinä järjestyksessä kuin päivä etenee: asiakkaan verkkovarauksesta kassan sulkemiseen illalla.

  • Asiakas varaa avaintyön verkossa
    Ennen
    Soita korjaamolle. Verkkokaupassa ei ollut varauspintaa, ja ajanvarausohjelma oli vain sisäinen.
    Jälkeen
    Julkinen kuukausikalenteri osoitteessa /varaa himmentää menneet, suljetut ja täydet päivät todellisen kapasiteetin perusteella. Asiakas valitsee ajan, ja työmääräys avautuu työnjohtajan jonoon varaus liitettynä.
  • Sen tietäminen mitä korjaamon lattialla tapahtuu
    Ennen
    Jakautui kassan, ajanvarausohjelman ja työnjohtajan kesken. Ei yhteistä näkymää päivään.
    Jälkeen
    Seitsemänvaiheinen tilankulku (Odottaa, Saapunut, Työn alla, Pysäytetty, Lisätyötilaus, Valmis, Luovutettu) televisiossa toimipisteittäin. Asentajat ohjaavat omat työnsä, työnjohtaja seuraa taulua.
  • Pysäytetty työ, josta kukaan ei tee päätöstä
    Ennen
    Asentaja mainitsee ongelmasta suullisesti tai viestillä. Joskus työnjohtaja huomaa, joskus ei.
    Jälkeen
    Pysäytetty-tila vaatii syyn ja muistiinpanon. Hälyttää kassalla kolmenkymmenen minuutin jälkeen, jos työnjohtaja ei ole tehnyt päätöstä. Mikään ei putoa väliin.
  • Varasto erkanee todellisuudesta
    Ennen
    Osat vähennettiin käsin päivän päätteeksi tulostetusta raportista.
    Jälkeen
    Työmääräyksen valmistuminen kirjaa tapahtuman varastolokiin, johon vain lisätään. Tilaushinnat täydennetään taannehtivasti, joten Tilattavat-näkymä näyttää todellisen kustannuksen ilman tuoretta toimittaja-aineistoa.
  • Maksun ottaminen tiskillä
    Ennen
    Erilliset järjestelmät kassalle ja verkkokorttimaksuille, ei yhteistä kuittinumerointia, alv täsmäytettiin käsin varausta vasten.
    Jälkeen
    Kassa samassa sovelluksessa, juoksevat kuittinumerot molemmissa toimipisteissä, alv 25,5 % riveittäin, päiväsummat mittaristossa, CSV-vienti kirjanpitäjälle.
  • Arkipyhät ja henkilökunnan vapaat
    Ennen
    Jokaisen vuoden pyhät merkittiin käsin. Pääsiäisen liikkuvat pyhät jäivät huomaamatta ainakin kerran.
    Jälkeen
    Toimipistekohtainen “Hae Suomen pyhäpäivät” -painike laskee pääsiäisestä johdetut päivät mille tahansa vuodelle. Jokaisella pyhällä on erikseen valittava “henkilökunta vapaalla” -rasti, joka pudottaa kyseisen päivän laskutettavat tunnit ja myyntitavoitteet — ei koskaan oletuksena.
  • Tukkuasiakkaat tilaavat varaosia
    Ennen
    Sähköposti, puhelin ja taulukko tukkuhinnoista. Hyväksyntä oli työnjohtajan päässä.
    Jälkeen
    Tukkutilin rekisteröinti, hyväksyntäjono, rajattu tuoteluettelo ja pelkkä laskutustilaus maksuehdoilla. Tilaushistoria näkyy molemmille osapuolille. Hyväksynnän tila on osa asiakastietoa.
  • Sen tietäminen onko kuukausi tavoitteessa
    Ennen
    Luvut kerättiin käsin, kuukausi toisensa jälkeen.
    Jälkeen
    Johdon mittaristo näyttää päivän myynnin, kuukauden myynnin tavoitetta vasten, avoimet ja valmiit työt, varaston arvon, varastohälytykset, asentajakohtaiset laskutettavat tunnit ja käyttöasteen sekä asiakastyytyväisyyden keskiarvot julkisilta 1–5-arviosivuilta.

Mitkä tavoitteet olivat

Asetettiin aloituksessa, arkkitehtuuripäätökset lukittuna yhdeksään ADR-dokumenttiin. Toteutusta pidetään näissä.

  • Korvaa ikääntyvä verkkokauppa-alusta
    Migraatio ensin -rakennusjärjestys (ADR 0002). Uusi tietomalli tehtiin ensin ja tuonti ajettiin vanhan alustan vientiaineistoa vasten ennen kuin mikään muu pinta meni tuotantoon. Siirtymä tehdään vaiheittain, yksi tuoteperhe kerrallaan, ilman yhden päivän riskiä.
  • Yksi totuus asiakkaasta, ajoneuvosta, työstä, varastosta ja maksusta
    Relaatiotietomalli sekä kohdennetut, vain lisäyksiä sallivat lokit (ADR 0003), ei täyttä CQRS:ää. Asiakkaan koontinäkymä kokoaa elinkaariostot, kuitit, tukkustatuksen ja ajoneuvohistorian yhdestä tietomallista.
  • Korjaamo pyörii lattialla, ei toimistossa
    Toimipistekohtainen televisiotaulu näyttää tilankulun reaaliajassa. Asentajat ohjaavat omat työnsä puhelimesta tai kioskista. Työnjohtajan näkymä on pääosin lukemista, kunnes pysäytetty työ vaatii päätöksen.
  • Kaksikielinen, suomi ensin
    Henkilökunnan ja asiakkaiden pinnat julkaistaan ensin suomeksi, englanniksi siellä missä sillä on merkitystä. Sanasto ankkuroi toimialan termit, jotta työnjohto tarkoittaa samaa koodissa, käyttöliittymässä ja keskustelussa.
  • Ensimmäinen tuotantojulkaisu ensimmäisen viikon sisällä
    Toteutui. Ensimmäinen julkinen varaus ja ensimmäinen sisäinen työmääräys menivät molemmat läpi oikeassa sovelluksessa ensimmäisen viikon aikana, ennen kuin yhtäkään vanhaa pintaa poistettiin.
  • Julkaise päivittäin, tarkista selaimessa, älä jää odottamaan asiakasta
    Pysyvä sääntö: jokainen julkaisu ajaa tyyppitarkistuksen, linttauksen, testit ja käännöksen, ja tarkistaa sitten tuloksen livenä selaimessa ennen eteenpäin siirtymistä. Asiakas lukee muutoslokisivun, jossa näkyy mitä julkaistiin ja mikä vaatii häneltä jotain, vastuutettuna.

Miten tavoitteisiin päästiin

Lyhyet kierrokset asiakkaan kanssa samassa huoneessa. Päivittäisiä julkaisuja, usein useita. Jokainen erä päättyy selaintarkistukseen livenä ja yhden rivin muutoslokimerkintään, jonka työnjohtaja lukee aamulla. Ei vaatimusmäärittelydokumenttia, ei Jiraa, ei työmääräarviopokeria.

Suhde on sama kuin jokaisessa Papu Studion toteutuksessa: Anthropicin Claude näppäilee suurimman osan, kokenut tekijä ajattelee. Malli on nopea rakenteen, tietomallin, server actionien ja tylsän liiman kanssa. Ihminen pysyy arkkitehtuurissa (yhdeksän ADR:ää lukittiin aikaisin), turvallisuuspäätöksissä (tukkuasiakkaiden luottorajat, juoksevat kuittinumerot, lokitettu henkilökunnan roolinvaihto) ja niissä päätöksissä jotka vaativat makua.

Järjestyksellä oli väliä. Migraatio ennen kuorrutusta. Tietomalli ennen käyttöliittymää. Tilankulku ennen ilmoituksia. Siinä vaiheessa kun kassa, varauskalenteri, tukkuluettelo ja johdon mittaristo olivat kaikki paikoillaan, alla oleva tietomalli oli jo kantanut oikeaa työtä viikkoja ja muoto oli vakaa.

Käytetty tekniikka

Nimetty niin, että kuka tahansa yrittäjä voi hakea ja tarkistaa.

  • Next.js + React
    Sovelluskehys

    Yksi Next.js-sovellus palvelee sekä kuluttaja- että tukkupuolen verkkotunnusta (ADR 0004). Server actionit pitävät kirjoitukset lähellä tietokantaa, ei erillistä rajapintakerrosta.

  • PostgreSQL + Drizzle ORM
    Tietokerros

    Tyyppiturvallinen tietomalli, migraatiot tavallisina SQL-tiedostoina, vain lisäyksiä sallivat lokit varastolle ja tilahistorialle. Valittiin nimenomaisesti Prisman sijaan (ADR 0001).

  • Railway (EU)
    Palvelin ja hallittu Postgres

    Yksi hallintanäkymä verkkopalvelulle, tietokannalle, kertaluonteisten SQL-ajojen välityspalvelimelle ja ympäristömuuttujille. EU-alue pitää asiakastiedot unionin sisällä.

  • Better Auth
    Kirjautuminen henkilökunnalle ja asiakkaille

    Salasana, Google ja Microsoft Entra kytkettynä samaan tiliin sähköpostin perusteella. Tukkuasiakkaiden kirjautuminen on eri osoitteessa kuin henkilökunnan.

  • Microsoft Entra
    Henkilökunnan kertakirjautuminen

    Asiakas toimitti tunnukset; henkilökunta kirjautuu työnsä Microsoft-tilillä, ja roolit säilyvät sähköpostin täsmäyksellä ensimmäisellä kirjautumisella.

  • Stripe (Payments, Terminal, Tax)
    Maksut

    Verkkokorttimaksut Stripe Checkoutin kautta, liikkeen korttimaksut paikan päälle paritetulla Stripe Terminal -laitteella, Suomen arvonlisävero Stripe Taxilla.

  • Resend
    Transaktiosähköposti

    Valmis-ilmoitukset, omistajan ilmoitukset, arviopyynnöt ja tukkutilausten vahvistukset. Toimiva perillemeno suomalaisesta verkkotunnuksesta ilman yritystason hinnoittelua.

  • Twilio
    Tekstiviestit (suunnitteilla)

    Varattu tilamuutosilmoituksiin asiakkaille (työ valmis, työ pysähtyy osien takia). Kytketty mutta ei vielä käytössä, tunnukset ovat asiakkaalla.

  • Cloudflare R2 + CDN
    Median tallennus ja jakelu

    Tuotekuvat, työmääräysten liitteet ja brändiaineistot. Ulosmenevä liikenne on ilmaista, millä on väliä kun tuoteluettelo kasvaa.

  • Kirjanpitovienti
    Kirjanpitointegraatio

    Kuitit ja laskut siirtyvät CSV-muodossa (puolipiste, BOM) päivittäin, muotoiltuna kirjanpitäjän tuontia varten.

  • Anthropic Claude Sonnet 4.5
    Koodin tuottaminen

    Luonnostelee tietomallin, server actionit, sivujen kytkennät, testit ja suomenkieliset tekstit englannista. Tekijä pysyy arkkitehtuurissa ja turvallisuuspäätöksissä.

Prosessi

Miltä työskentely Papu Studion kanssa näyttää ensimmäisestä viestistä siihen päivään, kun koodi on sinun.

  1. Kartoitus

    Tiukka haastattelusessio, tunnista kolmeen, jäsennelty. Kartoitamme todellisen työnkulun, nimeämme toimialan termit ja lukitsemme varhaiset arkkitehtuuripäätökset ADR-muotoon. Lähdet mukanasi kirjallinen projektikonteksti, sanasto sekä kiinteä hinta ja päivämäärä ensimmäiselle osalle.

  2. Rajattu MVP

    Ensimmäinen tuotantojulkaisu ensimmäisen viikon sisällä. Oikea tietomalli, oikea kirjautuminen, oikea data. Siitä eteenpäin jokainen muutos julkaistaan kirjautumisesi taakse tuntien sisällä ja tarkistat sen livenä samana päivänä.

  3. Jatkuva toimitus

    Huipussaan useita julkaisuja päivässä. Jokainen erä päättyy selaintarkistukseen ja muutoslokimerkintään. Työnjohtaja näkee mitä julkaistiin ja mikä vaatii häneltä jotain, vastuutettuna.

  4. Omistajuuden siirto

    Koodi on sinun GitHubissasi ensimmäisestä päivästä. Railway ja Cloudflare ovat sinun tilejäsi. Stripe-avaimet ovat sinun. Vaikka Papu Studio katoaisi huomenna, kuka tahansa pätevä kehittäjä voi ottaa seuraavan tehtävän muutoslokilta. Ei sitoutumista meihin, ei käyttäjäkohtaisia maksuja, ei alustalukkoa.

Pyöritätkö korjaamoa, jolla on verkkokauppa ja tukkupuoli? Voit ostaa saman järjestelmän.

Alusta on tuotannossa, työnjohtajan ja asentajien päivittäisessä käytössä, ja vanha verkkokauppa pyörii sen rinnalla siirtymän ajan. Jos pyörität korjaamoa, joka myy varaosia sekä kuluttajille että alan toimijoille, tarpeesi muoto on tarpeeksi lähellä tätä toteutusta, että suurin osa työstä on ulkoasun vaihto ja tiedonsiirto.

Vastaava toteutus maksaa noin puolet Monimutkainen-tason vakiohinnasta, koska tietomalli, tilankulku, varauksen ja kassan toimintalogiikka, arkipyhien käsittely, tukkuasiakkaiden luottorajat ja siirtotyökalut ovat jo valmiina. Jäljelle jää toimijakohtainen työ: teidän toimipisteenne, teidän tuoteluokituksenne, teidän kirjanpitovientinne muoto, teidän roolinne. Jos haluat nähdä tuotantosovelluksen ennen päätöstä, se on puolen tunnin puhelu.

Hintataso

Monimutkainen

yli 10 000 euroa

Sellainen back-office- tai liiketoimintatuote, joka on niin laaja, että integroinnit ja poikkeustapaukset ovat siinä vaikein osa.

Tämän tason sisältö →

Haluatko tällaisen omalle korjaamollesi?

Vaikein osa — oikean rakenteen löytäminen korjaamolle, joka pyörittää samalla verkkokauppaa ja tukkuluetteloa — on ratkaistu. Vastaava toteutus toiselle avain-, lukko- tai autosähköalan yritykselle maksaa noin puolet Monimutkainen-tason vakiohinnasta, koska tietomalli, seitsemänvaiheinen tilankulku, varauskalenteri, kassan toimintalogiikka ja arkipyhien käsittely ovat jo koeteltuja tuotannossa.

Aloita projekti

Haluatko tällaisen tiimillesi?

Aloita projekti