Веројатно никој од нас не сака кога треба да извади документ да дознае дека ја нема потребната документација или нешто недостасува. Гужвите пред шалтерите, таксите, и препраќањата од еден на друг шалтер се посебна приказна. Голем дел од овие проблеми се надминати со порталот uslugi.gov.mk, но и таму пронаоѓањето на точната услуга не е едноставно во 1027, колку што нуди платформата.
Дарко Ефремов, кој можеби го препознавате од Provizii.mk и Jps.mk се обиде да крера платформа која ќе ги реши овие проблеми. Дарко го создаде Шалтерко, личен „само да прашам“ асистент, кој на обичен, секојдневен јазик ви кажува точно што ти треба за која било од 1 027-те услуги на порталот uslugi.gov.mk. Без халуцинации, без редици и без „дојди утре“. Шалтерко работи како независна веб платформа, но и како екстензија за Uslugi на Google Chrome.
Со Дарко разговаравме за тоа како се роди идејата, како функционира Шалтерко без да измислува информации, и кој е планот за негова иднина.
И мене ми досади да погодувам во која од 17-те категории се крие услугата — па го направив Шалтерко

Со свои зборови, што е Шалтерко?
Шалтерко е како да имаш свој познат на шалтер: секогаш достапен, секогаш трпелив, и одговара без да чекаш ред.
Практично: пишуваш „ја изгубив личната карта“ (дури и да почнеш со „јас само да прашам“), со свои зборови, не со називот на услугата. Тој ти кажува која услуга ти треба, кои документи да ги понесеш, колку чини, колку трае и каде се поднесува. Ако услугата ја има онлајн, ти дава директен линк.
Живее на две места: како балонче директно на uslugi.gov.mk (Chrome екстензија) и како веб-апликација на salterko.mk. И едно правило од кое не отстапувам: одговара само од вистинските податоци на порталот. Ако нешто го нема, ти кажува дека го нема.
Која ти беше инспирацијата за креирање на платформата?
Конкретен настан. Член од фамилијата требаше да извади некои документи, и наместо проста постапка доби комплицирање и некои чудни такси што никој не знаеше да ги објасни. Класика.
Реков ајде да провериме на порталот, таму сигурно пишува сè. И пишуваше, ама пробај најди го. Пребарувањето практично не работи, а сè е закопано неколку нивоа длабоко во менија: категорија, подкатегорија, подкатегорија на подкатегоријата. За да најдеш услуга, мора однапред да знаеш каде е. А ако го знаеш тоа, не ти треба пребарување.
Тогаш кликна: податоците постојат, 1.027 услуги со документи, такси и рокови. Само влезот е скршен. Никој не размислува во категории на институции; луѓето размислуваат „ми се роди дете“, „ми истече пасошот“. Јас само залепив влез со нормален јазик врз нешто што веќе постои. Плус, кога таксите се напишани црно на бело однапред, нема простор за „чудни“ такси на шалтер.

Името е генијално, дали ова беше првата идеја или еволуираше до тука?
Искрено, на почетокот воопшто не размислував за име, го градев и толку. Прв пат се замислив кога требаше да купам домен: не можеш да купиш домен за нешто што нема име.
„Шалтерко“ е едноставна игра со зборот шалтер, по конвенција што веќе ја имаме во јазикот: кога на нешто ќе му залепиш „-ко“, добиваш лик. Смешко, Плачко, Мрзливко. Сме виделе слични именувања за секакви работи, па и половина машки имиња ни завршуваат така. Шалтер + ко, и одеднаш не е институција, туку некој. А тоа е точно што е производот: службеникот зад шалтерот, само верзијата што е трпелива, љубезна и никогаш не ти вели „тоа не е кај нас, спрат три“. Кога слоганот се напиша сам, „личен ‚само да прашам‘ асистент“, знаев дека тоа е тоа.
Како е изграден Шалтерко?
Monorepo (pnpm + Turborepo), два главни дела:
- Екстензијата: React + TanStack Router, content script што го монтира балончето на порталот. Таа никогаш не зборува директно со AI модел. Сè оди преку мојот API, па клучевите остануваат на серверот.
- Backend-от: TanStack Start на Cloudflare Workers. Таму е и веб-верзијата, најавата, кредитите, историјата (D1) и плаќањата (Polar).
Податоците: скрепер го обиколува целиот каталог, сите 1.027 услуги, и вади документи, услови, такси, рокови, институции. Успатна лекција што ја платив со дебагирање: порталот во табот „Услови“ држи услови за подобност, а вистинските документи се во сосема друго поле. „Да си државјанин“ не е хартија што ја носиш на шалтер, тие две не смеат да се измешаат.
Кога ќе прашаш нешто: прашањето се ембедира (bge-m3 преку Workers AI, трпи и кирилица и латиница, латиницата прво ја транслитерирам), се бараат најблиските услуги во Vectorize, и целосните записи на кандидатите одат кај Claude како единствен дозволен извор. Од таму, одговор.
Како успеа да го решиш проблемот со „халуцинациите“ на AI моделите?
Со едно правило: моделот смее да чита само од извлечените реални услуги, а ако ништо не одговара, одбива. Не погодува. Самоуверен погрешен одговор те праќа на шалтер без хартија, а тоа е полошо од порталот што го заменувам.
Правилото е засилено на неколку места:
- Векторското пребарување секогаш враќа „најблиски“ резултати, дури и за бесмислица. Затоа има праг на сличност: сè под него се фрла, и Шалтерко чисто си признава дека нема одговор (и не ти троши кредит за тоа).
- Секој кандидат носи ознака „силно“ или „слабо“ совпаѓање. Слабите се често случајност во вокабуларот, па моделот смее да им верува само ако буквално си ја именувал таа услуга.
- Цени смее да каже само од полето со такси. Ако порталот не наведува документи, вели дека се на страницата на услугата. Никогаш не измислува листа.
- И не форсира одговор. Ако напишеш само „извод“, тоа може да значи пет различни работи, па те прашува кој, наместо да го грабне првиот резултат.
Како ја замислуваш одржливоста? Дали целта на оние 5 евра е само покривање на API трошоците или има потенцијал за поголема комерцијализација?
Искрено: моментално, 5 евра се за покривање на трошоците. Инфраструктурата е на Cloudflare (Workers, D1, Vectorize) и на овој обем е практично џабе, па единствениот вистински трошок е повикот до LLM моделот. Затоа и наплаќам по вредност, не по повик: „здраво“ чини 0.1 кредит, потпрашање 0.3, а полн одговор со документи 1. Плаќаш за одговорот, не за муабетот.
Бесплатното ниво е дизајнирано да покрие нормален живот: просечен човек има административна мака еднаш-двапати месечно, па 5 процедури се сосема доволни. За него Шалтерко треба да е бесплатен засекогаш, не 14-дневен тест што те фаќа на невнимание. Пакетот е за оние што трошат повеќе: агенции, сметководители, оној другар што вади документи за цела фамилија. Тие го плаќаат бесплатното ниво за сите други.
Дали има потенцијал за повеќе? Мислам да. Оние на кои Шалтерко им штеди работни часови, не нерви, се природна претплатничка публика. Но нема да брзам таму. Основната работа, да те упати до вистинската услуга со вистинските документи, останува бесплатна за секого. Тоа е поентата на целиот проект и не е на продажба.

Шалтерко моментално работи како веб-алатка и екстензија, планираш ли дополнителни канали?
Архитектурата е буквално спремна за тоа: екстензијата и веб-верзијата се само две лица на истиот API, целата памет е на серверот. Нов канал значи нов тенок клиент, ништо повеќе.
А Viber е посебна тема. Кога целна публика ти се и луѓе на кои „инсталирај екстензија“ им звучи како казна, а Viber групата со фамилијата им е половина дигитален живот, ботот не е gimmick, туку веројатно највлијателниот канал што можам да го отворам. Да, на листата е.

Што е следно за Шалтерко? Ќе го научиш ли да пополнува и вистински обрасци?
Тоа е сонот, да. Природната скала е: те упатува (тоа е денес), те подготвува, поднесува за тебе.
Реално, денес тоа е на границата на невозможно, и не од техничка страна. Самата регистрација и најава на порталот е приказна за себе. А до API пристап за некои работи може и да се дојде, ама тоа не е отворен, автоматизиран процес како OAuth интеграција со кој било друг провајдер, туку оди по друга линија. За проект како овој, тоа во пракса значи дека официјална интеграција засега нема како да се случи.
А кога сакаш да се движиш брзо и да испорачуваш, точно такви работи стануваат bottleneck и извор на парализа: чекаш одговор, чекаш дозвола, а производот стои. Па научив да не го врзувам напредокот за нив. Најди друг начин сега, средувај ги тие работи подоцна. Just ship it.
Ама екстензијата е мојот адут тука. Таа живее директно на порталот, во прелистувачот на корисникот, во неговата веќе најавена сесија. Значи не ми треба дозвола од никого (инсталација = дозвола): Шалтерко може да помага при пополнувањето таму, на самата страница, како втор пар очи и раце. Ако доволно луѓе ја инсталираат, тоа е патот.
Се разбира, таму влегуваме во лични податоци и дејствија во нечие име, а Шалтерко е изграден на едно ветување: подобро да признае дека не знае, отколку самоуверено да згреши. За пополнување обрасци тоа важи двојно. Значи ќе стигне, ама кога ќе можам да го направам со истата дисциплина како одговорите: проверливо, транспарентно и без изненадувања.
Другата насока е ширење на самиот каталог. Принципот „прашај со свои зборови, добиј точен одговор од вистински податоци“ не важи само за државниот портал: истото може да се додаде за други институции, па и за бизниси, нивните услуги и производи да станат достапни за повеќе луѓе. Секој што има „портал во кој ништо не се наоѓа“ е кандидат.
Пред тоа има поблиски работи: квалитетот на одговорите го мерам и стегам постојано, каталогот се освежува од порталот, и следат нови канали. Чекор по чекор.
Шалтерко е достапен како веб-платформа и преку Google Chrome екстензија.
Страница: https://salterko.mk
Екстензија: https://chromewebstore.google.com/detail/genddpokednhgfiopggcponfcaepolac?utm_source=item-share-cb