Busscotrade

Public B2B website + private internal CRM for invoices, receivables, inventory, payments, and reporting

A hybrid business system built for an industrial distributor: the public layer handles trust, offer clarity, and contact flow, while the internal layer supports invoice records, bank-statement-based payment tracking, customer debt visibility, stock movement, and CSV reporting.

Project type

B2B industrial website + internal operations CRM

Role

Full-stack developer

Year

2026

Scope

Public website, authentication, role-based dashboard, inventory, invoices, payments, document imports, reporting, deployment

Busscotrade public website and internal CRM shown together across laptop, tablet, and phone
Internal CRM invoices view on a laptop, listing issued invoices with due dates, amounts, and status
Internal CRM receivables (Dugovanja) view on a laptop, listing customers, cities, and balance status
Internal CRM payments (Uplate) view on a laptop, listing payments imported from bank statements

Summary

Built for

An industrial distribution business that needed more than an online presence — a system that supports both market-facing communication and internal financial follow-through.

The problem

A brochure website could help with trust and discovery, but it would not solve overdue invoices, payment allocation, customer balances, or stock-related document workflows. The operational side of the business needed real structure.

Approach

I built a two-layer product: a bilingual public website for positioning and inquiries, and a protected internal CRM for invoices, payments, receivables, bank-statement imports, stock-aware document handling, and reporting.

Showcase story

Busscotrade is not just a company website. It is a two-layer B2B system: a public industrial presence and a protected internal CRM for finance and stock operations. The public layer communicates credibility, product structure, and partner trust, while the internal layer supports invoice records, stock movement, payment tracking, overdue monitoring, and CSV reporting.

The problem

A brochure website could help with trust and discovery, but it would not solve overdue invoices, payment allocation, customer balances, or stock-related document workflows. The operational side of the business needed real structure.

What I built

  • A bilingual industrial website in Serbian and English
  • Authentication and password-reset flows for internal users
  • A protected dashboard with role-based access
  • Invoice and goods-document workflows tied to stock movement
  • Customer receivables tracking with overdue visibility
  • Payment entry plus PDF bank-statement import
  • Excel-based invoice import with a review step before confirmation
  • CSV reports for stock, receivables, and turnover

Design decisions

The public site avoids flashy presentation and instead focuses on what matters in B2B industrial contexts: trust, legibility, product structure, and direct paths to contact. The category grid helps the offer feel organized instead of diffuse. The internal system is what turns this from a decent company website into a much stronger systems project. Role-based access, receivables tracking, and document-driven stock movement are exactly the kinds of internal workflows that determine whether a business can scale without chaos.

Under the hood

The public frontend is a bilingual marketing experience, while the private app is an authenticated, role-based dashboard covering inventory, invoices, receivables, payments, and reporting. That split demonstrates a more complete product mindset: not just attracting business, but running it.

Why it matters

This project signals:

  • Product thinking that goes beyond marketing pages
  • The ability to connect public presentation with internal operations
  • Business workflow design, not just interface design
  • Full-stack implementation across UI, data modeling, auth, and reporting

Final positioning line

A bilingual industrial website extended into a secure internal operations system for invoices, payments, receivables, stock movement, and reporting.

Under the hood

The public site and the internal CRM are genuinely separate layers. The public frontend is a bilingual marketing experience, while the private app is an authenticated, role-based dashboard covering inventory, invoices, receivables, payments, and reporting. Supabase handles auth, relational data, and row-level security, while dedicated import utilities parse Excel invoices and PDF bank statements before anything is confirmed into the system.

React

Public website and internal dashboard interface

TypeScript

Type-safe application logic across both layers

Supabase

Auth, relational data, and row-level security for the internal system

Tailwind CSS + shadcn/ui

Design system and component layer

TanStack Query

Data fetching and sync between the UI and Supabase

Excel and PDF parsing

Invoice import from spreadsheets and payment import from bank statements

Recharts

Reporting and KPI visualizations