Import cost dashboard ◆ sample data — wire to your PO history
A standing read on where landed costs and tariff exposure sit across active sourcing. Figures below are illustrative; live values arrive from Postgres once PO history is wired in.
Sourcing exposure by origin
Your recent estimates
Compare every source for one product
Search a product, set your terms, and the tool prices the full landed-cost stack for each qualified supplier — then calls the winner.
Landed cost by source
Live rates
Every input the landed-cost engine needs, in one place — with how fresh each one is and where it comes from. Green feeds refresh automatically; amber need a periodic check; grey change on a fixed schedule.
Country tariff matrix
Every duty layer that can stack onto an import, by country of origin, for the selected tariff line. This is the number the sourcing engine turns into dollars.
Product catalog
Each product carries its spec once and lists every qualified source beneath it. Add, edit or remove products here.
Suppliers
Contact and ordering details for each vendor, and the products you source from them. Update prices, lead times and terms here — changes flow straight into the sourcing engine.
Scenario planner
Move the levers that actually swing landed cost — tariffs, freight, FX, quantity — and watch every source re-price against today's baseline. Built for the "what happens when the 10% expires?" question.
Levers
Sales order feasibility
A customer wants a price. Enter the order and the tool tells you whether it clears your margin floor, at which source, and the lowest price you could accept.
Section 301 cost report
Every China-sourced line in the catalog, what the 25% Section 301 duty costs at a reference order, and what you'd save by moving to the best non-China source for the same product.
Supplier comparison
Pick two vendors and see them side by side on the products they both make — unit cost, lead time, landed cost, tariff and compliance exposure.
My estimates
Estimates you save from the Sourcing screen live here. Only you can see them — other users have their own list.
Materials & classification
Asheville Mica's product lines go well beyond mica plate — ceramics, laminates, films and papers each classify differently and carry different duty. This is the map from material to tariff line.
Glossary
Every term, fee and field used in this app, explained without jargon. If something on another screen is unclear, it is defined here.
Admin
Connection status, data feeds, and the setup reference for this deployment.
1 Authentication
Supabase Authentication handles sign-in. Accounts are created by an admin — public signup should stay switched off for an internal tool.
- Authentication → Users → Add user to create an account
- Tick Auto Confirm User or they wait on a confirmation email
- Sign In / Providers → Email → turn off "Allow new users to sign up"
2 Database
Postgres holds reference data everyone reads, and estimates only their owner can read.
- products + product_sources — one product, many suppliers
- suppliers — vendor master
- rates — FX and fees, written by the scheduled job
- estimates — private per user via row level security
3 Rate feeds
An edge function fetches each automatable rate on a schedule and writes it to rates.
- FXLIVE Open Exchange Rates, daily at 06:00 UTC
- Base duty / HTSTO DO USITC HTS API — free, no key
- Tariff actionsTO DO Federal Register API — free, no key
- FreightPAID Freightos / Xeneta — needs a contract
- Federal feesANNUAL CBP schedule — review yearly
4 Security
Row level security is enforced by the database, not this app — it holds even if someone calls the API directly.
- Reference tables: readable by any signed-in user
- Estimates: auth.uid() = user_id, owner only
- service_role key is server-side only — never in this file
- The anon key in this file is safe by design
-- the rule that makes a saved estimate private create policy "owner reads own estimates" on estimates for select to authenticated using (auth.uid() = user_id); -- verify it: sign in as two users, save an estimate as one, -- and confirm the other cannot see it in My Estimates.