This is a private Composer repository.
To use it, you have to add this repository to your composer.json file.
Add this Composer
repository to your project's composer.json
file, then you can require these private packages just like you would with
one from Packagist.
{
"repositories": [{
"type": "composer",
"url": "https://satis.viartas.com"
}]
}
Click on an individual package's release version to get a snippet of code for your project's dependencies.
Read more on how to handle composer private packages.
Cleverphant core — the product package behind the cleverphant.lt deployment. Owns the install/upgrade/activate command set, the content seeders and the deploy:sync hook; va-themes/cleverphant keeps the look (ExtensionModules/task-18).
Cleverphant Pages extension — the first extension package (ExtensionModules/task-19). Layers on top of va-modules/pages: scopes the template image picker to Cleverphant's own published assets, adds the read-only "Šablonų nuotraukos" admin screen, and owns the cleverphant-* template repair migration.
Viartas Auth — Fortify-backed login, register, password reset and email verification, with per-environment × per-locale route registration and public/private API token issuance via Sanctum.
Viartas CKEditor 4 — WYSIWYG editor (n1theme skin, image upload, YouTube plugin) with Laravel File Manager bridge, published to public/vendor/ckeditor.
Viartas Core — foundation module: shared core:: translations, admin dashboard route, public web search routes, and the global form-validator asset.
Viartas Countries — the CMS-wide country registry: ISO codes, CLDR names in every locale, flags, calling codes, EU membership and VAT rates.
Form Builder package for Viartas CMS — fields, groups, validation, translatable support
Viartas ModuleManager — DB-driven runtime module management: per-env enable, per-route SEO/GEO, sidebar identity.
Viartas Themes — admin UI + runtime resolution for per-environment theme overrides (views, controllers, configs, translations).
Viartas Translations — UI strings, route-segment translations, model-column labels and locale management.
Viartas Users — admin CRUD for users + roles, profile zone, API token management and permission-group metadata. Provides the User model used as the auth provider.
Viartas Badges module — cross-module translatable label chip (text + Bootstrap contextual color) attached polymorphically via the HasBadge trait to any badgeable model. Package name uses cms-badges prefix because 'badges' is a GitLab reserved path; PHP namespace remains ViartasCross\Badges.
Viartas Geo module — cross-module GEO (Generative Engine Optimization / AI search optimization): AI summary, Q&A pairs, entities and bot access control attached polymorphically via the HasGeo trait to any geoable model.
Viartas Logs module — admin UI for spatie/laravel-activitylog. Adds a per-model 'Logs' tab and a global last-changes dashboard across any loggable model. Cross-module, decentralized config.
Viartas Media module — Spatie Media Library integration with per-model media tabs, polymorphic galleries, on-demand conversions, crop modal and cache-busted URLs. Cross-module, decentralized config.
Viartas Microdata module — cross-module Schema.org structured data generator (itemscope/itemtype/itemprop HTML attributes) attached polymorphically via the HasMicrodata trait to any microdataable model.
Viartas SEO module — cross-module meta tags / Open Graph / noindex-nofollow / canonical manager attached polymorphically via the HasSeo trait to any seoable model.
Viartas TestAudit module — browser-test audit log (feature/test_run/fix records produced by Playwright runs and manual artisan commands) + admin review UI.
Florial companies (B2B clients) domain — the Company model (florial_companies) with a pending→approved→suspended approval workflow, admin CRUD + a 5-tab company-detail (Info/Employees/Orders/Invoices/Users). Single-tenant; sales-rep + company-admin linkage. (Florial/task-11).
Florial core — client environment seam. Registers the /savitarna, /pardavimai and /operacijos route seams for the Florial flower-subscription product (Florial/task-1). Catalog + domain modules land in sibling va-florial/* packages.
Florial employees domain — the Employee model (florial_employees) and their recurring Occasion model (florial_occasions: birthday/name_day/work_anniversary/anniversary/jubilee, each with a date + assigned package). Employees are pure entities with no login account (discovery §1). Admin CRUD with nested occasions. (Florial/task-12).
Florial B2B invoicing — the Invoice + InvoiceLine models (florial_invoices, florial_invoice_lines) with monthly aggregation of a company's delivered orders, a separate VAT line, statuses (draft/sent/paid/overdue) and an admin listing with mark-paid. Single-tenant. (Florial/task-21).
Florial notifications core (Florial/task-36) — per-user in-app notifications (florial_user_notifications) shown in the savitarna cabinet + DB-editable email templates (florial_email_templates) with admin CRUD. The template bodies are read by the email/telegram channels (task-37/38). Single-tenant; no stancl/tenancy.
Florial orders core — the Order model (florial_orders) with a guarded status machine (planned → confirmed → preparing → delivering → delivered/cancelled) and a global admin orders listing (type/status filters + manual status change routed through the machine). B2B (company_id + employee_id) or B2C (subscriber_id) via a `type` discriminator. Single-tenant. (Florial/task-14).
Florial packages catalog — the bouquet/package catalog (price incl. VAT, cost, computed margin, occasions, one Media image). Single source of truth consumed by Orders, the CSV import and subscriptions (Florial/task-7).
Florial payments gateway abstraction (Florial/task-39 — LATER/Phase 8). A swappable PaymentGateway interface + Stripe implementation (hosted Checkout; no saved card since Florial/task-172 — B2C is prepaid on the payment page). Persists into the task-23 florial_payments ledger (adds gateway/gateway_id columns). Interface stable so task-40 can add Paysera without touching call sites. Single-tenant; no stancl/tenancy. Florial/task-157 adds the public order payment page on the existing delivery_token (/apmoketi/{token}).
Florial procurement summary — aggregates `confirmed` orders for the nearest supply window BY PACKAGE (simple unit count, NOT a stem BOM) into a ProcurementSummary + ProcurementSummaryLine, built by `florial:procurement-build` and surfaced to floristers at /operacijos/tiekimas ("how many of each package to buy"). Single-tenant. (Florial/task-17).
Florial sales domain — the SalesRep model (florial_sales_reps) with a portfolio read off florial_companies.sales_rep_id (task-110 — the JSON assigned_companies column is gone) + a per-order commission ledger (florial_commissions, state derived from order status: planned…delivering → pending, delivered → earned, cancelled → cancelled, mark-paid → paid). `florial:commissions-accrue` recomputes daily (idempotent). Admin: sales-reps CRUD + commissions history with mark-paid (single + bulk) + a per-rep wallet (available = earned − paid). Single-tenant. (Florial/task-24).
Florial subscriptions — B2C annual plans (Standartas/Premium/Luxe) and (task-9) space plans catalog, plus the B2C (task-19) and space (task-20) subscription runtime + the subscriber cabinet (task-29). This task (Florial/task-8) adds the SubscriptionPlan model + admin CRUD.
Viartas Account module — user-facing account web zone (profile, settings, password change). Auth + verified protected, web-only.
Viartas Authors module — byline entity independent of User accounts (nullable user_id), translatable role title + bio, LinkedIn, avatar via va-cross/media, editorial ("informacija") bylines without a public page. Public profile at /autoriai/{slug} (LT) or /authors/{slug} (EN) through the slug catchall (priority 430).
Viartas Comments module — polymorphic comments (`commentable` opt-in), moderation by the reader's plan (pre-moderation `pending` visible only to its author / post-moderation with a member badge), one-level replies, likes, a removed-comment skeleton, a denormalised per-commentable count, abuse limits (rate, length, links, per-user pre-moderation flag) and the newsroom's moderation queue with audit.
Viartas ContentBlocks module — typed body blocks for any model (one polymorphic content_blocks table, per-field per-locale JSON data). BlockSchema is the single source of truth for block types; models opt in via the HasContentBlocks trait + a 'blockable' config block, and get an admin "Blokai" tab (AJAX CRUD + drag-drop).
Viartas ContentFields module — universal custom-field framework; admin defines field definitions per target model (ContentFieldGroup → ContentField → ContentFieldOption + polymorphic ContentFieldValue), surfaced via the HasContentFields trait as a 'Papildomi laukai' tab on target edit pages.
Viartas CookieConsent module — GDPR cookie consent without dark patterns: three categories (essential always on, analytics + marketing opt-in, default OFF), a compact bottom-left banner with three equal buttons shown on the homepage only, a /slapukai settings page with role=switch toggles, an append-only consent log (cookie_consents: user_id nullable, anon_id, categories, anonymised IP, UA hash, text version), a versioned text (a bump re-asks), server-side CookieConsent::allows() for ads/analytics and an admin summary report.
Viartas CustomLinks module — reusable URL link library; plug-in source for the Menus picker. Admin-only (no public URL).
Viartas DemoSeedersPack module — console-only demo seeder + supplier feed fixture + default UpdateFields dictionary bundle. Ships BigCatalogDemoSeeder / QuickCatalogDemoSeeder / DefaultUpdateFieldsDictionariesSeeder plus the `demo:refresh` and `demo:fixtures:generate` commands. No migrations, no UI, no permissions. Registered LAST (priority 110) so all catalog packages are available to the seeders.
Viartas FAQ module — hierarchical FAQ categories + entries, slug-addressable on public web with Schema.org Question/Answer microdata.
Viartas Forms module — admin form-builder UI on top of the va-core/form-builder DSL. DB-backed form definitions, [[form:slug]] shortcode render, submissions + email notifications.
Viartas GridBuilder module — lightweight page-builder lite. Single-blob GridContent (translatable HTML + grid_data structure) attachable to any content model via the HasGridContent trait (morphOne); admin grid-contents AJAX CRUD + per-target Blokai tab + server-side-rendered, cacheable <x-gridbuilder::grid-content> Blade component. Legacy GridLayout/GridBlock tree dropped in task-5f.
Viartas HeaderSearch module — catalog-focused header search dropdown + autocomplete API + click tracking + admin analytics dashboard. Additive on top of Core's existing /paieska search.
Viartas installation partners module — 3-level hierarchy (Country → City → Partner). Tire/wheel mounting partner directory with addresses, contact info, work hours, Google Maps embed and Schema.org LocalBusiness/AutoRepair microdata. Slug-addressable on the public web.
Viartas Menus module — DB-driven navigation (admin sidebar + web header/footer) with drag-drop tree, polymorphic menuable items, and per-locale labels.
Viartas News module — individual news articles, slug-addressable on the public web (catchall priority 400), with one primary category + extra categories pivot.
Viartas NewsCategories module — hierarchical taxonomy for news articles, slug-addressable on the public web (catchall priority 450).
Viartas Newsletter module — email subscription flow (double opt-in, unsubscribe token, admin list). Skeleton: subscribers DB + model + provider + permissions.
Viartas Pages module — primary CMS content (hierarchical pages, multi-level slug paths), root-URL addressable through the catchall slug resolver (priority 500, catch-all fallback).
Viartas Stores module — physical retail outlets + customer pickup points with address, contacts, multi-shift weekly schedule and holiday exceptions. Public web URL `/parduotuves/{slug}` (LT) / `/stores/{slug}` (EN) via slug catchall (priority 260). Helpers Store::isOpenAt() / getNextWorkingDate() feed per-store delivery scheduling in Suppliers.
Viartas Tags module — cross-module tagging built on spatie/laravel-tags. Per-module type isolation (Tag::where('type', '{moduleSlug}')); modules opt in via a 'taggable' config block + Spatie's HasTags trait.
Viartas UpdateFields module — translation dictionary between supplier feed values and our canonical values (AttributeValue, ProductBrand, ProductSeries, ProductModel, ProductColor, ContentFieldOption, free_text, boolean). Used by Suppliers BaseDriver::applyUpdateFields() per feed row; admin-only dictionary catalog + per-supplier override entries + bulk CSV import/export + lookup debug UI.
News portal banner ads (NewsPortal/task-28) — the inventory of 9 named positions + the native „Užsakomasis turinys“ (portal_ad_positions: per-device format lists, weekly rate-card price, reserved for a client or the Wolet network), the IAB format × device matrix in code (AdFormatMatrix: long horizontals and tall verticals never on a phone — 300×250 takes their place), creatives (portal_ad_creatives: format, device, media, click URL, alt, weight), the server-side slot render <x-ads::slot position="…" /> that picks the position's format for the requesting device (a desktop creative is never sent to a phone), a reserved state that is a designed state (format label / political empty state), and the membership rule (AdVisibility: a member sees no sticky / in-feed, a subscriber only native + political; SOFT on memberships). Campaigns (task-29): flights, budgets and positions bought at a share, the rotation (one draw per page view), the marketing-consent gate for third-party creatives, the cache boundary (slots filled after the first paint from /reklama/slotas/{pozicija}), the tracked click redirect, the admin calendar and ads:lifecycle. Statistics (task-30): viewable impressions and clicks buffered in Redis (no DB write per event) and flushed into portal_ad_daily by ads:flush-stats, the bot filter, the derived budget spend, and the advertiser report /reklama/ataskaita/{token} with CSV export.
News portal articles — extension over va-modules/news (NewsPortal/task-10). Adds the portal's per-article fields (access level, soft reminder, hero layout + focal point, sponsored labelling, print source, view counter, content-updated mark, author link) in its own 1:1 table, the four-way reader reactions and the admin "Portalas" tab. Since task-11 also the locality taxonomy (portal_locations + news_location pivot, /admin/vietoves, the public ?viet= filter, the homepage Apylinkes block). Since task-12 the server-side access gate (atviras / registruotiems / nariams x guest / reader / member, teaser cut in blocks, per-tier body cache, paywall microdata, soft-reminder dismissal). Since task-13 the byline: author_id FK to va-modules/authors, the author picker on the Portalas tab, the byline composer and the author profile article source.
News portal classifieds (NewsPortal/task-22) — the taxonomy (10 data types → 6 UI segments, the map in code), the classified model with every field (structured price/phone/place/year/email apart from the text, type-specific data JSON, four card formats blokas/eilute/baneris/cerem, recurring + recurrence, status enum draft → laukia → apmoketa → paskelbta → pasibaige|atmesta), per-type categories, the public /skelbimai list (segment counts from the DB, ?tipas= / ?grupe= preselection, #skb-NN deep links, per-reader „Nauja“ badge — localStorage for guests, portal_classified_seen for readers), the admin CRUD /admin/skelbimai, the private API and the detail page /skelbimai/{tipas}/{slug} (task-23: unique <title>, one-click contact reveal, buffered statistics, „Užjaučiu“, legacy ?id= → 301) and the submission form /skelbimai/pateikti (task-24: signed-in only, 5 form types, one validation source, status laukia, queued confirmation, 60 s idempotency) and the text engines (task-25: a deterministic formatting standard for every non-personal ad with a live preview, an optional AI tidy-up published only after the reader approves it, the original always kept, the paid highlight) and the money (task-26: the price list in the DB with three server-decided price states, the atomic member quota, ONE status machine for UI / API / the future payments webhook, the signed 90-day management link, moderation, recurrence and expiry) and the two special presentations (task-27: /uzuojautos with surname search and a candle that IS the heart — one counter, /renginiai — upcoming events by month with kind chips).
News portal core — the product package behind a regional newsroom deployment (Tenooto / Vilnis). Owns the portal:install|upgrade|activate|deactivate command set, the portal_settings store, the deploy:sync hook and the editorial dashboard /admin/skydelis (task-49); the look belongs to va-themes/vilnis (NewsPortal/task-1).
News portal attribution — „ir ką tai uždirbo?" (NewsPortal/task-47): last-touch attribution of the conversions (newsletter signup, member started, classified submitted, push opt-in) to the content / channel the reader saw last (article, category, classified, newsletter issue; utm_source → facebook / naujienlaiskis / push / google / direct), first-party only — the anonymous id and the UTM only with the `analytics` cookie consent; a daily KPI rollup (`insights:rollup`, idempotent), the ×3 value metric (revenue ≥ 3 × the product's monthly cost, traffic light), the per-article „atnešė" column in the news list and the article's edit screen, the admin insights + channels report. No per-reader profile anywhere.
News portal memberships (NewsPortal/task-34) — the plans (portal_plans: skaitytojas · narys · prenumeratorius, translatable title / lead / benefits, monthly · yearly · calendar half-year prices in the DATABASE, „Redakcijos siūloma“), the subscriptions (portal_subscriptions: status aktyvi · pristabdyta · atsaukta · pasibaigusi, current_period_end, cancel_at_period_end, scheduled downgrade, delivery address, requisites) with an append-only history (portal_subscription_events), the lifecycle (upgrade at once, downgrade / cancel at the period's end — privileges stay until then, memberships:expire), the ONE benefits gate every other portal package asks (MembershipGate: guest · reader · member · patron × 8 abilities), the price formatter (yearly as a monthly equivalent + „Mokama 48 € kartą per metus“) and the one member counter. No payment code — that is va-news-portal/payments.
News portal payments (NewsPortal/task-36) — the ONE payment layer of the portal: the swappable PaymentGateway (FakeGateway — the dev / testing default; NeopayGateway — Lithuanian banks + card, switched on by .env keys; room for Montonio / Stripe), portal_payments (memberships, gifts, classifieds — one table, one state machine pradetas · apmoketas · atmestas · grazintas · needs_review, idempotency key per intent, a callback reaching twice settles once), the checkout /naryste/apmokejimas (6 methods, .is-busy, inline done / failed), recurring renewals (payments:charge-due — 3 attempts a day apart, then pristabdyta + a letter, never a silent stop) and the receipts (portal_invoices, gap-free numbering, PDF when dompdf is installed, else HTML + CSV). The money goes to the NEWSROOM's own gateway account — no intermediary in the code.
News portal reader polls (NewsPortal/task-46): a poll attached to an article (rendered after the article body — outside the access gate, so a gated article keeps its poll) or standing alone, one vote per reader (a signed-in reader — unique per account; a guest — a cookie token plus a hashed IP, never the raw one, unique for 30 days), results right after the vote (percentages by the largest remainder, they always sum to 100), counters kept by an observer (no COUNT(*) per request), the /apklausos archive (active first, then the closed ones by end date, the leader / winner with its share), the admin CRUD with drag-drop options, `polls:close` and the private API.
News portal PWA + web push (NewsPortal/task-44..45). Part I — the PWA: a manifest generated from portal_settings (/manifest.webmanifest — theme_color is the active portal theme's --brand, icons 192/512/maskable from `portal:pwa-icons`), a generated service worker (/sw.js — app shell cache-first, content network-first, an /offline fallback in the theme's design, the cache versioned by the shell's build hash so a deploy always invalidates it; no article prefetch) and the install prompt gate with the prototype's rules unchanged (mobile ≤ 767 px · not standalone · not installed · 30 days after „Ne dabar“ · only after the cookie decision · from the 2nd visit · after 1.4 s). Visits and the dismissal — `portal_pwa_state` for a signed-in reader, an encrypted cookie for a guest. The sheet itself is the theme's. Part II (task-45) — web push: VAPID (minishlink/web-push), the two-step consent (our screen first, the browser's dialog only after „Įjungti pranešimus“ — enforced server-side), topics (sauga for every device and unswitchable; tema / vietove a member benefit), the frequency cap per recipient (deferred, never dropped), batched queued sending (100, 2 retries, 410 → the device deleted, 5 failures → deactivated), a send log without personal data and the newsroom's composer with a mandatory preview.
News portal reader settings (NewsPortal/task-39..41) — an EXTENSION of va-modules/account: the `/nustatymai` settings shell (8-item sub-nav, shared `.set-*` rows) and its first screen „Paskyra“ — inline name edit, e-mail change through a confirmation letter, linked Google / Facebook sign-ins (never the last way in), 2FA (QR + recovery codes), the GDPR copy of the reader's data (ZIP over the queue, link valid 24 h) and account deletion with a 7-day undo window (comments anonymised, payments kept); and „Planas ir mokėjimai“ (task-40) — the current plan and the next payment, the payment method as the gateway reports it (no card data here), invoice requisites for FUTURE receipts, the receipts archive (real PDF download), the payer's gift codes (copy / resend), the coupon entry, the paper delivery address (patrons only) and a cancellation in two steps with one pause offer; and (task-41) „Prieinamumas“ (preferences that travel with the account, printed on <html> server-side, a guest's localStorage taken over once), „Pranešimai“ (safety always on, personalisation for members), „Išsaugotas turinys“ (saved articles, my comments, my classifieds by account AND e-mail + the quota) and „Matomumas“ (the supporters-wall opt-out).
News portal search (NewsPortal/task-17) — extension over va-core/core: the live dropdown endpoint (GET /paieska/uzklausa, JSON) and the /paieska results page (controller override of core's public SearchController while the portal theme is the active web theme). One SearchService for both: NFD + diacritics + lowercase normalisation on the query AND the index, multi-word AND, explicitly registered SearchSource classes (articles, categories, pages; classifieds later), fixed group order Straipsnis → Kategorija → Skelbimas → Puslapis, +1 for a category, server-side <mark>, 5-minute cache per (query × locale).
News portal social publishing (NewsPortal/task-48): a published article travels to the newsroom's Facebook page on its own — queued with a cancel window (`scheduled_at` = publish + delay), the per-channel message template (title + lead cut at a word + the link WITH UTM `utm_source=facebook&utm_medium=social&utm_campaign=auto`), editable before it goes; a per-channel daily cap (over it → the next morning), 3 attempts with exponential backoff and a mail to the newsroom on the last failure (never a silent skip); the calendar, evergreen SUGGESTIONS (older than N days, views above the median — approved by an editor, never posted on their own); encrypted page tokens with an expiry warning 7 days ahead; „Facebook atnešė N prenumeratorių / M narių" from va-news-portal/insights. One-way: nothing is ever read back from Facebook.
Seglo banking — bank statement ingest. task-132: reuses the va-seglo/sources parser framework + Deduplicator + ingest_log to write ledger transactions, adds the currency / bank_account_id / parent_transaction_id / category_id columns to the ledger transactions table (soft alter) and strengthens dedup from a count-then-insert into an atomic insertOrIgnore behind a per-account unique index.
Seglo clients — the buyer (customer) registry of an issuing company. task-113: the seglo_clients table (tenant DB, entity_id FK + EntityScope), the Client model with its VAT dimensions, the /accounting/klientai CRUD and ClientVatContextBuilder (client → VatResolver BuyerVatContext, soft-resolved). task-114 adds the addresses/contacts, task-115 the hash-link portal, task-116 the statistics (ClientStatsBuilder, soft on va-seglo/invoicing) and the identity_map bridge (ClientIdentityLinker, soft on va-seglo/rules).
Seglo core — accounting environment seam. Registers /accounting/* route seam for the Seglo reconciliation product (task-1). Tenancy + domain modules land in sibling va-seglo/* packages.
Seglo expenses — reimbursable people + their expenses (task-32 scaffold). people + expenses tables (tenant DB, entity_id FK + EntityScope), Person/Expense models with an ExpenseStatus enum (pending/clarify/paid/rejected) and an idempotent demo seeder. Self-service UI (task-33), mobile capture (task-34), source-people admin (task-35) and ledger reimburse (task-36) land later.
Seglo export — the accounting export module (task-22). exports + period_locks tables (tenant DB, entity_id FK + EntityScope), ExportManager + CsvAdapter (adapter pattern), and the 3-step wizard (format → period+entity → preview → CSV download). Exports ONLY reconciled (ok) rows, with intercompany flags. At /accounting/eksportas.
Seglo insights — read-only KPI aggregation. task-42: KpiAggregator (Nesusegta / Pinigai limbo + aging / Nepavyko / Įplaukos / Išlaidos / Atsiperka €) computed from the ledger via StateResolver, and the /accounting/apzvalga dashboard. No tables of its own. Health metrics + leader/license land in task-43+.
Seglo invoicing — the issuing engine. task-123: the seglo_invoices + seglo_invoice_lines tenant tables (EntityScope), the invoice editor (issuer from SellerProfile, buyer from Client, series+number through SeriesNumberAllocator), per-line VAT through the sellers VatResolver, and InvoiceTotalsCalculator (bcmath 2dp). A draft carries no number; issuing allocates one.
Seglo ledger — the reconciliation core. task-12: the transactions table (tenant DB, entity_id FK + EntityScope), Transaction model + read-only register at /accounting/transakcijos, MBKR demo transactions. Invoices/matching/reconcile land in task-13+.
Seglo notifications — a company's own email templates (task-178): seglo_mail_templates tenant table (EntityScope), per-event subject/body per locale with a variable catalogue validated ON SAVE, sanitized HTML, an attachment policy that chooses WHETHER to carry the stored invoice PDF (never re-renders it), a live preview against a real document, and a fallback to the built-in invoicing letter when a company has no template. Plus (task-179) notification recipients: who is told about corrections, cancellations, credit notes, period locks, import changes and failed bulk sends — with a before/after diff, per event or as a daily digest, through the queue, audited.
Seglo OCR — document recognition. task-30: a standalone package that turns a PDF/photo invoice into structured fields. OcrService is an adapter over an external OCR API (OcrDriver interface + HttpOcrDriver + FakeOcrDriver for tests, chosen by config('ocr.driver')); FieldExtractor pulls supplier / amount / VAT (PVM) / IBAN / invoice number / date out of the OCR text with a per-field confidence. Low-confidence (or unrecognised) documents are NEVER auto-assigned — they are flagged needs_review and delegated to the human-review queue (task-18) via the SOFT OcrLowConfidence event. Dependencies on va-cross/media (file source) and va-seglo/ledger (queue) are SOFT (class_exists / event listener), so the package is testable in isolation with FakeOcrDriver. UI integration (drawer / upload / mobile) is task-31.
Seglo products — the goods/services registry of an issuing company, and the stock behind it. task-118: the seglo_products + seglo_product_codes tables (tenant DB, entity_id FK + a SHARED-aware EntityScope), the Product/ProductCode models, the /accounting/prekes CRUD with Spatie media, and ProductSearchService (EAN / manufacturer CAI / supplier code / SKU / name, Lithuanian-diacritic folded). task-119: the seglo_stock table (per company, per supplier, orphan-tolerant), the manual stock CRUD with filters, and StockCacheService (a per-company aggregate cached on the product row).
Seglo purchases — the purchase invoice as a DOCUMENT (task-172): seglo_purchase_invoices + seglo_purchase_invoice_lines tenant tables (EntityScope), unique per SUPPLIER (entity_id, supplier_id, supplier_number), lines priced at the rate the SUPPLIER printed (VatResolver deliberately not applied), the original file through Spatie Media, a draft → confirmed → paid/disputed/cancelled lifecycle and a private-api surface.
Seglo rules — the reconciliation rule engine (task-24 scaffold). rules table (tenant DB, entity_id FK + EntityScope), Rule model + full CRUD (/accounting/taisykles): priority list, enable switch, "suveikė N×" (hit_count). The engine (RuleEngine evaluate/apply) lands in task-25.
Seglo security — the append-only audit trail (task-37). audit_log table (tenant DB, entity_id FK + EntityScope, append-only), AuditLogger service capturing who/what/when/ip for every Seglo mutation, and a CSV export at /accounting/saugumas/audit/csv. Foundation for 2FA/sessions/allowlists (task-38..41).
Seglo sellers — the seller (issuing company) foundation. task-106: the seglo_seller_profiles table (tenant DB, entity_id unique FK + EntityScope), the SellerProfile model and the read-only company-details screen at /accounting/imones/rekvizitai. Bank accounts / doc series / VAT-OSS / payment providers land in task-107+.
Seglo sources — ingest. task-20: the sources + ingest_log tables (tenant DB, entity_id FK + EntityScope), Source/IngestLog models + the sources hub. task-21: the upload connector — StatementParser (CSV/XML/XLSX, Luminor/SEB/Swedbank), Deduplicator (content_hash), UploadConnector writing ledger transactions, at /accounting/saltiniai/ikelimas. task-28: the email fetch@ connector — EmailConnector + SupplierRecognizer (VAT/IBAN), sender allowlist (BEC gate, email_allowlist tenant table), inbound webhook (secret-gated, tenant/Entity resolved from the fetch@ address) creating ledger invoices, at /accounting/saltiniai/email. task-176: the intake mailbox — IMAP fetcher + fetch@ attachments → va-seglo/ocr file layer → review queue (seglo_mail_intake_documents), sender gate over both allowlists, Message-ID + attachment-hash dedup, seglo:mail-fetch. task-29: robot (scraping) connectors — robot_queue tenant table + RobotQueueItem, RobotConnector (test/run/needsReauth stub), RunRobotQueueJob (queued→running→done/failed/reauth status machine), encrypted credential vault, reauth flow + test-connection at /accounting/saltiniai/robotai; cloud (OAuth stub + watched folder), connect (copyable webhook URL + secret-gated inbound) and bank (PSD2 placeholder) screens.
Seglo tenancy foundation — stancl/tenancy (DB-per-tenant), central tenants/domains (task-5), the Group/Entity tenant hierarchy + entity_user pivot + EntityScope global scope + demo seeder (task-6). The tenant.scope middleware + session-driven active Entity land in task-7.
Viartas Cart module — manages cart state (NOT checkout). Provides cart / cart_items / cart_events tables, AJAX add-to-cart endpoints, slide-out cart drawer, /krepselis (LT) | /cart (EN) full cart page, required-addon auto-add (is_required flag), guest cart merge on login, price-drift detection, and an abandoned-cart cleanup console command. Cross-FK invariants: cart_items has product_id XOR product_variation_id with an addon_of_cart_item_id tree hierarchy. HARD requires va-shop/products.
Viartas CatalogBrowsing module — pure UX layer that composes the product listing grid, dynamic filter sidebar (per CategoryAttributes is_filterable_lg/sm), sort dropdown and cursor-based pagination surfaced on ProductCategory web pages. No DB tables of its own. HARD requires va-shop/products + va-shop/category-attributes.
Viartas CategoryAttributes module — pivot between ProductCategory × Attribute with 8 policy flags (is_variation/is_attribute/is_content_field/is_visible_in_product/is_visible_in_category/is_filterable_lg/is_filterable_sm/is_selectable). Single 'Atributai' admin tab on ProductCategory edit page (priority 35). Drives Products variation generation + category listing filtering. Admin-only (no public URL, no slug resolver). First Wave 5 package with 3 HARD requires.
Viartas CategoryRelations module — two pivot tables binding ProductCategory to (a) other ProductCategories (cross-sell/up-sell) and (b) Products (category-level default related/addon set). Two admin tabs on ProductCategory edit; admin-only, no public URL. HARD requires va-shop/products (FK category_related_products.product_id → products.id).
Viartas ModelTests module — third-party model test results (AutoBild, ADAC, etc.) where ProductModels are ranked. Each test belongs to a ProductCategory; ranks/scores/notes live on the model_test_product_model M:N pivot. Public detail URLs resolve via the slug catchall at /{category-fullslug}/testai/{test-slug} (priority 240). HARD requires va-shop/product-categories + va-shop/product-models.
Viartas ProductAttributes module — 3-level catalog dictionary hierarchy AttributeGroup → Attribute → AttributeValue (Matmenys → Plotis → 205; Spalva → Color → Raudona). Admin-only (no public URL, no slug resolver). Drives Products variations + ContentFields source + UpdateFields lookup. Root taxonomy package — CategoryAttributes (task-60) HARD requires it.
Viartas ProductBrandGroups module — flat concerns / parent groups for ProductBrands (Michelin Group, VW Group, ...). Slug-addressable on the public web via the catchall registry (priority 300) under /koncernai/{slug} (LT) or /groups/{slug} (EN).
Viartas ProductBrands module — flat manufacturers (Michelin, Samsung, Taurus, ...). Admin-only domain entity with NO public URL of its own: brands surface on the public web only via BrandCategory pages, ProductBrandGroup landings, ProductSeries and ProductModel pages. Ships the BrandCategory pivot-as-content pages (priority 310 catchall) as a submodule.
Viartas ProductCategories module — hierarchical e-commerce taxonomy. Slug-addressable on the public web via the catchall registry (priority 320). Root of the Shop FK chain — Products, ProductModels, CategoryAttributes, ModelTests etc. depend on it.
Viartas ProductColors module — color / finish / design variants of a concrete ProductModel (Diamond Black, Matte Bronze, Galaxy S24 Violet, ...). Leaf node of the catalog hierarchy. Public URL `/{cat-fullslug}/{brand-slug}/{series-slug?}/{model-slug}/{color-slug}` (catchall priority 270, lowest in chain). HARD requires va-shop/product-models (FK product_colors.model_id → product_models.id).
Viartas ProductFilters module — universal user-side product filter facade. Exposes ProductFilter::forCategory()/forBrand()/forBrandGroup()/forSeries()/forModel()/forColor() fluent builder + ProductFilterService backbone + reusable Blade components (facet-sidebar, checkbox-group, price-range, active-filters). Wraps CatalogBrowsing FilterQueryComposer/SortApplier (single source of truth for filter semantics) and adds scope-based cache invalidation observers. No public URL of its own. HARD requires va-shop/catalog-browsing + va-shop/products.
Viartas ProductImports module — cross-supplier import pipeline (staging + normalization + matching + apply + revert). Owns the per-row `product_import_staging_rows` table (3 JSON columns original/detected/corrected + 6-bucket matcher enum) plus normalization/extraction rules, code templates, attribute overrides/changes and the persistent EAN blocklist. StagingWriter is consumed by Suppliers' BaseDriver::import() so every parsed feed row materializes BEFORE matching. Bundles the 4 cascade Apply resolvers (Brand/Model/Product/Stock), RevertService, CatalogSuggester, per-feed stepper Dashboard + global Naujinimai Overview, `imports:archive` cron and the import/apply/image/rematch/renormalize queue jobs. Admin-only — no public URL. HARD requires va-shop/suppliers.
Viartas ProductModels module — concrete product entries (Galaxy S24, Pilot Sport 4, ...). Tier-3 shop taxonomy leaf in the Brand → Series → Model chain. Belongs to a (brand_id, category_id) pair plus optional series_id. Public URL `/{cat-fullslug}/{brand-slug}/[{series-slug}/]{model-slug}` (catchall priority 280). HARD requires va-shop/product-series (FK product_models.series_id → product_series.id).
Viartas ProductSeries module — brand series within a category (Galaxy S, Pilot Sport, ...). Tier-2 shop taxonomy in the Brand → Series → Model chain. Public URL `/{cat-fullslug}/{brand-slug}/{series-slug}` (catchall priority 290). HARD requires va-shop/product-brands (FK product_series.brand_id → product_brands.id).
Viartas Products module — main product entity + variations + per-supplier stock + attribute pivots + related/addon products. Central node of the Wave 5 shop FK chain. Public web URL `/{cat-fullslug}/{product-slug}` (catchall priority 250, leaf entity). HARD requires va-shop/product-categories, va-shop/product-brands, va-shop/product-models, va-shop/product-colors.
Viartas Suppliers module — external feed/distribution partner registry + import driver framework + source connector layer + scheduler. Bundles Supplier (entity), SupplierFeed (per-supplier × category import config), SupplierDeliverySchedule, SupplierUnavailableDate, SupplierImportMapping, SupplierImportSession, SupplierFeedBlockRule and per-row import events. Driver hierarchy (BaseDriver → 4 generic + TyreImportDriver → VdbaCarTyreDriver), 5 source connectors (local_upload/http/ftp/api_paginated/custom), mapping operations envelope (copy/regex_extract/split/concat/sum/formula), encrypted FTP creds, and a supplier:update {code}[:{feed}] artisan command for manual + scheduler-driven feed runs. Admin-only — no public URL. HARD requires va-modules/stores.
Cleverphant — content website theme for educational institutions (cleverphant.lt redesign base).
Florial — flower-subscription product theme (savitarna/pardavimai/operacijos client cabinets + public web).
Viartas CMS — Protera public web theme (tyres / wheels / batteries storefront)
Seglo — accounting/reconciliation product theme for the `accounting` environment.
Viartas CMS — default admin theme
Viartas CMS — modern admin theme (4 themes × 6 accents, opt-in)
Vilnis — the web theme of the news portal product (Tenooto / vilnis.lt): tokens, fonts, the portal layout and its nine chrome partials. Behaviour and data belong to va-news-portal/* (NewsPortal/task-2).
Viartas Delivery Vilnius — pristatymas Vilniaus ribose
Beautiful activity log UI for Spatie Activity Log with Viartas Admin Theme
Viartas core
Viartas ckeditor
Viartas select2
Viartas swal2
Viartas cart
Viartas shop core
Viartas shop discount-codes
Viartas florial theme
This Composer repository is powered by Satis