use App\Http\Controllers\ContactController; use App\Http\Controllers\ValynController; use App\Http\Controllers\DebtorController; use App\Http\Controllers\LinksController; use App\Http\Controllers\ServiceController; use App\Http\Controllers\ShareController; use App\Http\Controllers\UrlReferenceController; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\IncomeStatementController; use App\Http\Controllers\BalanceSheetController; use App\Http\Controllers\UserController; use App\Http\Controllers\RoleController; use App\Http\Controllers\PermissionController; use App\Http\Controllers\TransactionTypesController; use App\Http\Controllers\TransactionsController; use App\Http\Controllers\Regional_tier2Controller; use App\Http\Controllers\Regional_tier1Controller; use App\Http\Controllers\MunicipalityController; use App\Http\Controllers\CityController; use App\Http\Controllers\SicCodesController; use App\Http\Controllers\GinibycountryController; use App\Http\Controllers\GinitrendController; use App\Http\Controllers\PopulationController; use App\Http\Controllers\EmploymentrateController; use App\Http\Controllers\UnemploymentrateController; use App\Http\Controllers\LegalstructureController; use App\Http\Controllers\SophisticationdevelopingController; use App\Http\Controllers\SophisticationdevelopedController; use App\Http\Controllers\NumberofstaffController; use App\Http\Controllers\SophisticationController; use App\Http\Controllers\SophisticationtypeController; use App\Http\Controllers\CountrynameController; use App\Http\Controllers\CountryfactorController; use App\Http\Controllers\CountryeconomicdataController; use App\Http\Controllers\CountryController; use App\Http\Controllers\PersonController; use App\Http\Controllers\EnterprisepersonroleController; use App\Http\Controllers\EnterpriserolesController; use App\Http\Controllers\NonfinancialdataController; use App\Http\Controllers\EnterpriseController; use App\Http\Controllers\BudgetdataController; use App\Http\Controllers\ScoresController; use App\Http\Controllers\ClientsController; use App\Http\Controllers\SubscriptiontypesController; use App\Http\Controllers\SubscriptionRatesController; use App\Http\Controllers\CurrenciesController; //use App\Http\Controllers\ISReportController; //TODO: ISReportController does not exist //use App\Http\Controllers\ISReportDisplayController; use App\Http\Controllers\BSReportController; use App\Http\Controllers\TransactioncategoryController; use App\Http\Kernel; //Route::get('/share/{any}', [ShareController::class, 'viewShared'])->where('any', '.*'); Route::domain('redled.smefactory.net')->group(function () { Route::get('/', [\App\Http\Controllers\RedledController::class, 'home']); }); Route::domain('bizwin.smefactory.net')->group(function () { Route::get('/', [\App\Http\Controllers\BizwinController::class, 'home']); }); Route::domain('count.smefactory.net')->group(function () { Route::get('/', function () { return redirect('/profitpilot/service/cloud-count'); }); }); Route::domain('assess.bemt.net')->group(function () { Route::get('/', function () { return view('assess_bemt.home'); }); }); Route::domain('assess.smefactory.net')->group(function () { Route::get('/', function () { return view('assess_smef.home'); }); }); // ProfitPilot's own content routes are unscoped (registered below, outside // any Route::domain() wrapper), so they already answer profitpilot.biz by // default. This group exists only to give profitpilot.biz its own real, // correctly-branded /login, /register, /password/reset - added 10 Aug 2026, // there was no auth route for this domain at all before this. Route::domain('profitpilot.biz')->group(function () { Auth::routes(['verify' => true]); }); Route::domain('www.profitpilot.biz')->group(function () { Auth::routes(['verify' => true]); }); Route::domain('bemt.net')->group(function () { Route::get('/', [\App\Http\Controllers\BEMTController::class, 'home']); Route::get('/about', function () { return view('bemt.about'); }); Route::get('/ceo', function () { return view('bemt.ceo'); }); Route::get('/clients', function () { return view('bemt.clients'); }); Route::get('/products', function () { $controller = new \App\Http\Controllers\BEMTController(); return view('bemt.products', ['index' => $controller->get_index()]); }); Route::get('/contact', function () { return view('bemt.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Auth::routes(['verify' => true]); Route::get('/subscribe', function () { return view('bemt.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('bemt.cockpit'); }); Route::get('/bemt/index', [\App\Http\Controllers\BEMTController::class, 'index'])->name('bemt.index'); Route::get('/bemt/{title}', [\App\Http\Controllers\BEMTController::class, 'show_content'])->name('bemt.show')->where('title', '.*'); }); Route::domain('www.bemt.net')->group(function () { Route::get('/', [\App\Http\Controllers\BEMTController::class, 'home']); }); Route::domain('smefactory.net')->group(function () { Route::get('/', function () { return view('smefactory.home'); }); Route::get('/about', function () { return view('smefactory.about'); }); Route::get('/ceo', function () { return view('smefactory.ceo'); }); Route::get('/clients', function () { return view('smefactory.clients'); }); Route::get('/products', function () { return view('smefactory.products'); }); Route::get('/contact', function () { return view('smefactory.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Auth::routes(['verify' => true]); Route::get('/subscribe', function () { return view('smefactory.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('smefactory.cockpit'); }); }); Route::domain('www.smefactory.net')->group(function () { Route::get('/', function () { return view('smefactory.home'); }); Route::get('/about', function () { return view('smefactory.about'); }); Route::get('/ceo', function () { return view('smefactory.ceo'); }); Route::get('/clients', function () { return view('smefactory.clients'); }); Route::get('/products', function () { return view('smefactory.products'); }); Route::get('/contact', function () { return view('smefactory.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('smefactory.register'); }); Route::get('/subscribe', function () { return view('smefactory.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('smefactory.cockpit'); }); }); Route::domain('skills2biz.com')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('www.skills2biz.com')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('skills2biz.net')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('www.skills2biz.net')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('startsmart.skills2biz.com')->group(function () { Route::get('/', function () { return view('startsmart.home'); }); Route::get('/about', function () { return view('startsmart.about'); }); Route::get('/ceo', function () { return view('startsmart.ceo'); }); Route::get('/clients', function () { return view('startsmart.clients'); }); Route::get('/products', function () { return view('startsmart.products'); }); Route::get('/contact', function () { return view('startsmart.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('startsmart.register'); }); Route::get('/subscribe', function () { return view('startsmart.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('startsmart.cockpit'); }); Route::get('/dashboard', function () { return redirect('https://valyn.net/dashboard'); }); }); Route::domain('valyn.net')->group(function () { Auth::routes(['verify' => true]); // Real product decision, 13 Aug 2026: "no free accounts" - Valyn's whole // model is pay first via /checkout/{code}, account created automatically // after payment (see StripeCheckoutController). This standalone Register // page predates that 10 Aug pivot and still let anyone create a free // account with no payment, contradicting "nothing on Valyn is free". // Overrides Auth::routes()' own /register (later registration wins on a // duplicate route signature within the same domain), sending visitors to // Products instead, where every path leads through a real checkout. Route::get('/register', function () { return redirect()->route('valyn.products') ->with('flash_message', 'Valyn accounts are created automatically once you subscribe to a product - choose one below to get started.'); })->name('register'); Route::get('/', [ValynController::class, 'home'])->name('valyn.home'); Route::get('/about', [ValynController::class, 'about'])->name('valyn.about'); Route::get('/who-we-serve', [ValynController::class, 'whoWeServe'])->name('valyn.who-we-serve'); Route::get('/our-ceo', [ValynController::class, 'ourCeo'])->name('valyn.our-ceo'); Route::get('/products', [ValynController::class, 'products'])->name('valyn.products'); Route::get('/disclaimer', function () { return view('valyn.disclaimer'); })->name('valyn.disclaimer'); Route::get('/products/valuation-tools', function () { return view('valyn.product-valuation-tools'); })->name('valyn.product-valuation-tools'); Route::get('/play-and-think', function () { return view('valyn.play-and-think'); })->name('valyn.play-and-think'); Route::middleware(['remember-intended', 'auth', 'subscribed:f002|f007'])->group(function () { Route::get('/valuation', [ValynController::class, 'valuation'])->name('valyn.valuation'); Route::post('/valuation/calculate', [ValynController::class, 'valuationCalculate'])->name('valyn.valuation.calculate'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f001|f007'])->group(function () { Route::get('/products/f001/app', [\App\Http\Controllers\RetirementRequirementController::class, 'show'])->name('valyn.products.f001.app'); Route::post('/products/f001/app/calculate', [\App\Http\Controllers\RetirementRequirementController::class, 'calculate'])->name('valyn.products.f001.calculate'); Route::post('/products/f001/app/choose', [\App\Http\Controllers\RetirementRequirementController::class, 'chooseSource'])->name('valyn.products.f001.choose'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f002|f007'])->group(function () { Route::get('/products/f002/app', [\App\Http\Controllers\BusinessValuationController::class, 'show'])->name('valyn.products.f002.app'); Route::post('/products/f002/app/calculate', [\App\Http\Controllers\BusinessValuationController::class, 'calculate'])->name('valyn.products.f002.calculate'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f003|f007'])->group(function () { Route::get('/products/f003/app', [\App\Http\Controllers\RetirementDashboardController::class, 'show'])->name('valyn.products.f003.app'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f005|f007'])->group(function () { Route::get('/products/f005/app', [\App\Http\Controllers\ValynAccountingLinkController::class, 'activate'])->name('valyn.products.f005.app'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f010|f012|f013|f014'])->group(function () { Route::get('/products/f010/app', [\App\Http\Controllers\ProfessionalClientController::class, 'index'])->name('valyn.products.f010.app'); Route::post('/products/f010/app/clients', [\App\Http\Controllers\ProfessionalClientController::class, 'store'])->name('valyn.products.f010.clients.store'); Route::get('/products/f010/app/client/{client}', [\App\Http\Controllers\ProfessionalRetirementController::class, 'show'])->name('valyn.products.f010.client'); Route::post('/products/f010/app/client/{client}/calculate', [\App\Http\Controllers\ProfessionalRetirementController::class, 'calculate'])->name('valyn.products.f010.client.calculate'); Route::post('/products/f010/app/client/{client}/choose', [\App\Http\Controllers\ProfessionalRetirementController::class, 'chooseSource'])->name('valyn.products.f010.client.choose'); Route::post('/products/f010/app/client/{client}/valuation', [\App\Http\Controllers\ClientValuationController::class, 'calculate'])->name('valyn.products.f010.client.valuation.calculate'); }); Route::middleware(['remember-intended', 'auth'])->group(function () { Route::get('/dashboard', function () { return redirect()->route('valyn.products.f003.app'); })->name('valyn.dashboard'); Route::get('/dashboard/register-shareholder', [ValynController::class, 'shareholdingRegisterForm'])->name('valyn.dashboard.shareholding.form'); Route::post('/dashboard/shareholding', [ValynController::class, 'shareholdingRegister'])->name('valyn.dashboard.shareholding'); }); Route::get('/cockpit', function () { return redirect()->route('valyn.cockpits.menu'); })->name('valyn.cockpit'); Route::get('/contact', [ValynController::class, 'contact'])->name('valyn.contact'); Route::post('/contact', [ValynController::class, 'contactSubmit'])->name('valyn.contact.submit'); Route::get('/communications', [ValynController::class, 'communications'])->name('valyn.communications'); Route::post('/communications/subscribe', [ValynController::class, 'subscribe'])->name('valyn.subscribe'); Route::get('/country-data', [\App\Http\Controllers\CountryDataController::class, 'index'])->name('valyn.country-data'); Route::get('/country-data/{code}', [\App\Http\Controllers\CountryDataController::class, 'detail'])->name('valyn.country-data.detail'); Route::get('/products/f001', function () { return view('valyn.products.f001'); })->name('valyn.products.f001'); Route::get('/products/f002', function () { return view('valyn.products.f002'); })->name('valyn.products.f002'); Route::get('/products/f003', function () { return view('valyn.products.f003'); })->name('valyn.products.f003'); Route::get('/products/f004', function () { return view('valyn.products.f004'); })->name('valyn.products.f004'); Route::get('/products/f005', function () { return view('valyn.products.f005'); })->name('valyn.products.f005'); // F008/F009 retired 15 Aug 2026 - merged into F002 (Franchise Y/N branch, // all seven methodologies). Redirects kept so any old link lands on the // real product instead of a 404, actual tool/controller code removed. Route::get('/products/f008', function () { return redirect()->route('valyn.products.f002'); })->name('valyn.products.f008'); Route::get('/products/f009', function () { return redirect()->route('valyn.products.f002'); })->name('valyn.products.f009'); Route::middleware(['remember-intended', 'auth', 'subscribed:f006|f007'])->group(function () { Route::get('/products/f006/app', [\App\Http\Controllers\MonthlyBusinessAnalysisController::class, 'show'])->name('valyn.products.f006.app'); }); Route::get('/products/f006', function () { return view('valyn.products.f006'); })->name('valyn.products.f006'); Route::get('/products/f007', function () { return view('valyn.products.f007'); })->name('valyn.products.f007'); Route::middleware(['remember-intended', 'auth', 'subscribed:f007'])->group(function () { Route::get('/products/f007/welcome', function () { return view('valyn.products.f007-welcome'); })->name('valyn.products.f007.welcome'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f012|f013|f014'])->group(function () { Route::get('/products/f012/welcome', function () { return view('valyn.products.f012-welcome'); })->name('valyn.products.f012.welcome'); }); Route::get('/products/f010', function () { return view('valyn.products.f010'); })->name('valyn.products.f010'); // F011 retired 15 Aug 2026 - merged into F002. Redirect kept so any old // link lands on the real product instead of a 404. Route::get('/products/f011', function () { return redirect()->route('valyn.products.f002'); })->name('valyn.products.f011'); Route::get('/products/f012', function () { return view('valyn.products.f012'); })->name('valyn.products.f012'); Route::get('/products/f013', function () { return redirect()->route('valyn.products.f012'); })->name('valyn.products.f013'); Route::get('/products/f014', function () { return redirect()->route('valyn.products.f012'); })->name('valyn.products.f014'); // Deliberately not auth-gated - buying a subscription must not require an // account first. Stripe Checkout collects the buyer's email itself; the // webhook finds-or-creates the user record after payment succeeds. // Changed 10 Aug 2026 per Rob: "no login until money received." Route::get('/checkout/{code}', [\App\Http\Controllers\StripeCheckoutController::class, 'checkout'])->name('valyn.checkout'); Route::post('/checkout/{code}/email', [\App\Http\Controllers\StripeCheckoutController::class, 'checkoutEmail'])->name('valyn.checkout.email'); Route::get('/checkout/{code}/success', [\App\Http\Controllers\StripeCheckoutController::class, 'success'])->name('valyn.checkout.success'); Route::get('/checkout/{code}/cancel', [\App\Http\Controllers\StripeCheckoutController::class, 'cancel'])->name('valyn.checkout.cancel'); Route::get('/rr-index-lab', [\App\Http\Controllers\RrIndexLabController::class, 'show'])->name('valyn.rr-index-lab'); Route::get('/turnover-impact-lab', [\App\Http\Controllers\TurnoverImpactLabController::class, 'show'])->name('valyn.turnover-impact-lab'); Route::get('/net-profit-growth-lab', [\App\Http\Controllers\NetProfitProjectionLabController::class, 'growth'])->name('valyn.net-profit-growth-lab'); Route::get('/net-profit-scaling-lab', [\App\Http\Controllers\NetProfitProjectionLabController::class, 'scaling'])->name('valyn.net-profit-scaling-lab'); Route::get('/dashboard-lab', [\App\Http\Controllers\DashboardLabController::class, 'show'])->name('valyn.dashboard-lab'); Route::get('/cockpit-gate', [\App\Http\Controllers\CockpitGateController::class, 'show'])->name('cockpit-gate'); Route::post('/cockpit-gate', [\App\Http\Controllers\CockpitGateController::class, 'attempt'])->name('cockpit-gate.attempt'); Route::middleware(['remember-intended', 'auth', 'subscribed:f004|f007'])->group(function () { Route::get('/dashboard-cockpits', [\App\Http\Controllers\CockpitController::class, 'menu'])->name('valyn.cockpits.menu'); Route::get('/cockpit/{type}', [\App\Http\Controllers\CockpitController::class, 'show'])->name('valyn.cockpit.show'); }); }); Route::domain('www.valyn.net')->group(function () { Auth::routes(['verify' => true]); Route::get('/{any?}', function ($any = '') { return redirect('https://valyn.net/' . $any, 301); })->where('any', '.*'); }); Route::get('/', function () { return view('profitpilot.home'); })->name('home'); Route::get('/about', function () { return view('profitpilot.about'); }); Route::get('/contact', [ContactController::class, 'index']); Route::post('/contact/submit', [ContactController::class, 'submit']); Route::get('/our-clients', function () { return view('profitpilot.clients'); }); Route::get('/register', function () { return view('profitpilot.register'); }); Route::get('/ceo', function () { return view('profitpilot.ceo'); }); Route::get('/subscribe', function () { return view('profitpilot.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeProfitpilot']); Route::get('/profitpilot/service/{serviceName}', [ServiceController::class, 'getServices'])->name('service'); Route::get('/profitpilot/advisory_board', function () { return view('/profitpilot/advisory_board'); }); Route::get('/prosport360', function () { return view('profitpilot.prosport360'); })->name('prosport360'); Route::get('products/manageme', function () { return view('products.manageme'); })->name('products.manageme'); Route::get('products/sme-finance', function () { return redirect('/products/manageme'); }); Route::get('/coming-soon', function () { return view('profitpilot.coming_soon', ['item' => request('item', 'This product')]); })->name('coming-soon'); // --- SME Calculators (100-formula reference list) --- Route::get('/sme-calculators', [\App\Http\Controllers\SmeCalculatorsController::class, 'index'])->name('sme-calculators'); // --- Content edit gate (interim, standalone password — proper Roles/Permissions system planned for Supabase) --- Route::get('/content-edit-gate', [\App\Http\Controllers\ContentEditGateController::class, 'show'])->name('content-edit-gate'); Route::post('/content-edit-gate', [\App\Http\Controllers\ContentEditGateController::class, 'attempt'])->name('content-edit-gate.attempt'); // --- RedLed (funding content library) --- Route::get('/redled', [\App\Http\Controllers\RedledController::class, 'home'])->name('redled.home'); Route::get('/redled/index', [\App\Http\Controllers\RedledController::class, 'index'])->name('redled.index'); Route::middleware([\App\Http\Middleware\ContentEditGate::class])->group(function () { Route::get('/redled/upload', [\App\Http\Controllers\RedledController::class, 'upload_view'])->name('redled.upload'); Route::post('/redled/upload-chapter', [\App\Http\Controllers\RedledController::class, 'import'])->name('redled.import'); Route::delete('/redled/delete/{id}', [\App\Http\Controllers\RedledController::class, 'destroy'])->name('redled.destroy'); }); Route::middleware(['auth'])->group(function () { Route::get('/redled/{title}', [\App\Http\Controllers\RedledController::class, 'show_content'])->name('redled.show')->where('title', '.*'); }); // --- BizWin (entrepreneurial self-understanding content library) --- Route::get('/biz-win', [\App\Http\Controllers\BizwinController::class, 'home'])->name('bizwin.home'); Route::get('/bizwin/index', [\App\Http\Controllers\BizwinController::class, 'index'])->name('bizwin.index'); Route::middleware([\App\Http\Middleware\ContentEditGate::class])->group(function () { Route::get('/bizwin/upload', [\App\Http\Controllers\BizwinController::class, 'upload_view'])->name('bizwin.upload'); Route::post('/bizwin/upload-chapter', [\App\Http\Controllers\BizwinController::class, 'import'])->name('bizwin.import'); Route::delete('/bizwin/delete/{id}', [\App\Http\Controllers\BizwinController::class, 'destroy'])->name('bizwin.destroy'); }); Route::middleware(['auth'])->group(function () { Route::get('/bizwin/{title}', [\App\Http\Controllers\BizwinController::class, 'show_content'])->name('bizwin.show')->where('title', '.*'); }); // --- Cloud Count (interactive calculators) --- Route::get('/cloud-count', function () { return redirect('/profitpilot/service/cloud-count'); })->name('cloud-count.home'); Route::middleware(['auth'])->group(function () { Route::get('/calculate-gross', [\App\Http\Controllers\CalculateGrossController::class, 'index'])->name('calculate-gross'); Route::get('/calculate-irrroi', [\App\Http\Controllers\CalculateIRRandROIController::class, 'index'])->name('calculate-irrroi'); Route::get('/calculate-is', [\App\Http\Controllers\CalculateISController::class, 'index'])->name('calculate-is'); Route::get('/sale-analysis', [\App\Http\Controllers\SalesAnalysisController::class, 'index'])->name('sale-analysis'); Route::get('/dupont-analysis', [\App\Http\Controllers\DupontCalculatorController::class, 'index'])->name('dupont-analysis'); Route::get('/client-sales', [\App\Http\Controllers\ClientSalesController::class, 'index'])->name('client-sales'); Route::get('/calculate-selffunded', [\App\Http\Controllers\CalculateSelfFundedGrowthController::class, 'index'])->name('calculate-selffunded'); Route::get('/calculate-assetvaluation', [\App\Http\Controllers\CalculateAssetValuationController::class, 'index'])->name('calculate-assetvaluation'); Route::get('/calculate-ebitda', [\App\Http\Controllers\CalculateEbitdaController::class, 'index'])->name('calculate-ebitda'); Route::get('/calculate-stockinventory', [\App\Http\Controllers\CalculateStockInventoryController::class, 'index'])->name('calculate-stockinventory'); Route::get('/calculate-debtors', [\App\Http\Controllers\CalculateDebtorsController::class, 'index'])->name('calculate-debtors'); Route::get('/calculate-creditors', [\App\Http\Controllers\CalculateCreditorsController::class, 'index'])->name('calculate-creditors'); Route::get('/calculate-inventoryratio', [\App\Http\Controllers\CalculateInventoryRatioController::class, 'index'])->name('calculate-inventoryratio'); Route::get('/calculate-salesratio', [\App\Http\Controllers\CalculateSalesRatioController::class, 'index'])->name('calculate-salesratio'); }); Route::group(['middleware' => ['auth', 'verified']], function () { Route::get('/profit_pilot', [App\Http\Controllers\ProfitPilotController::class, 'index'])->name('profit_pilot'); Route::resource('users', UserController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('roles', RoleController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('permissions', PermissionController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('transaction-types', TransactionTypesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('regional_tier2', Regional_tier2Controller::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('regional_tier1', Regional_tier1Controller::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('municipality', MunicipalityController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('city', CityController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sic-codes', SicCodesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sic-headings', \App\Http\Controllers\SicHeadingController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('ginibycountry', GinibycountryController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('ginitrend', GinitrendController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('population', PopulationController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('employmentrate', EmploymentrateController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('unemploymentrate', UnemploymentrateController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('legalstructure', LegalstructureController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophisticationdeveloping', SophisticationdevelopingController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophisticationdeveloped', SophisticationdevelopedController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('numberofstaff', NumberofstaffController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophistication', SophisticationController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophisticationtype', SophisticationtypeController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryname', CountrynameController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryfactor', CountryfactorController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryeconomicdata', CountryeconomicdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryeconomicdata', CountryeconomicdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('country', CountryController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('person', PersonController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('smeroles', EnterpriserolesController::class)->middleware('auth'); Route::resource('nonfinancialdata', NonfinancialdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::middleware(\App\Http\Middleware\PermissionsMiddleware::class)->group(function () { Route::resource('transactions', TransactionsController::class); Route::get('/correction-transactions/journals', [\App\Http\Controllers\CorrectionTransactionsController::class, 'newJournal']); Route::post('/correction-transactions/journals/store', [\App\Http\Controllers\CorrectionTransactionsController::class, 'journalsStore'])->name('correction_transactions.journals.store'); Route::get('/correction-transactions/credit-notes', [\App\Http\Controllers\CorrectionTransactionsController::class, 'credit']); Route::get('/correction-transactions/debit-notes', [\App\Http\Controllers\CorrectionTransactionsController::class, 'debit']); Route::resource('/correction-transactions', \App\Http\Controllers\CorrectionTransactionsController::class); Route::get('/reports', [\App\Http\Controllers\ReportController::class, 'index']); Route::resource('incomestatement', IncomeStatementController::class); Route::resource('cashflowstatement', \App\Http\Controllers\CashFlowStatementController::class); Route::resource('balancesheet', BalanceSheetController::class); Route::get('/financial-reports', [\App\Http\Controllers\FinancialReportController::class, 'show'])->name('financial.reports'); Route::resource('sme', EnterpriseController::class); Route::resource('smepersonrole', EnterprisepersonroleController::class); }); //Route::resource('enterprise', EnterpriseController::class)->middleware('auth'); try middleware('role:Create Clients'); Route::resource('budgetdata', BudgetdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('scores', ScoresController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('clients', ClientsController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('subscriptiontypes', SubscriptiontypesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('subscription-rates', SubscriptionRatesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('currencies', CurrenciesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('clients', ClientsController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('bsreport', BSReportController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('transactioncategory', TransactioncategoryController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::get('sme-finance', [\App\Http\Controllers\SMEFinanceController::class, 'index'])->middleware('auth')->name('sme-finance.index'); Route::get('sme-finance/forms/product-information', [\App\Http\Controllers\SMEFinanceController::class, 'info'])->name('info'); Route::get('sme-finance/forms/product-information/accept', [\App\Http\Controllers\SMEFinanceController::class, 'info_accept'])->name('info.accept'); Route::get('sme-finance/forms/setup-costs', [\App\Http\Controllers\SMEFinanceController::class, 'setup_costs_show'])->middleware('auth')->name('sme-finance.setup-costs'); Route::get('sme-finance/forms/product-costs', [\App\Http\Controllers\SMEFinanceController::class, 'product_costs_show'])->middleware('auth')->name('sme-finance.product-costs'); Route::post('sme-finance/forms/setup-costs/store', [\App\Http\Controllers\SMEFinanceController::class, 'setup_costs_save'])->middleware('auth')->name('sme-finance.setup-costs.store'); Route::post('sme-finance/forms/product-costs/store', [\App\Http\Controllers\SMEFinanceController::class, 'product_costs_save'])->middleware('auth')->name('sme-finance.product-costs.store'); Route::get('sme-finance/reports/price-list', [\App\Http\Controllers\SMEFinanceController::class, 'price_list'])->middleware('auth')->name('sme-finance.price-list'); Route::get('sme-finance/reports/price-list/print', [\App\Http\Controllers\SMEFinanceController::class, 'price_list_report'])->middleware('auth')->name('sme-finance.price-list.print'); Route::get('sme-finance/reports/price-list-simple', [\App\Http\Controllers\SMEFinanceController::class, 'price_list_simple'])->middleware('auth')->name('sme-finance.price-list-simple'); Route::get('sme-finance/reports/price-list-simple/print', [\App\Http\Controllers\SMEFinanceController::class, 'price_list_simple_report'])->middleware('auth')->name('sme-finance.price-list-simple.print'); Route::middleware('auth')->group(function () { //budget Route::get('sme-finance/forms/units-budget', [\App\Http\Controllers\SMEFinanceController::class, 'units_budget'])->name('sme-finance.units-budget'); Route::post('sme-finance/forms/units-budget/store', [\App\Http\Controllers\SMEFinanceController::class, 'units_budget_save'])->name('sme-finance.units-budget.store'); Route::get('sme-finance/reports/cos-budget', [\App\Http\Controllers\SMEFinanceController::class, 'cos_budget'])->name('sme-finance.cos-budget'); Route::get('sme-finance/reports/sales-budget', [\App\Http\Controllers\SMEFinanceController::class, 'sales_budget'])->name('sme-finance.sales-budget'); Route::get('sme-finance/reports/cos-budget/print', [\App\Http\Controllers\SMEFinanceController::class, 'cos_budget_report'])->name('sme-finance.cos-budget.print'); Route::get('sme-finance/reports/sales-budget/print', [\App\Http\Controllers\SMEFinanceController::class, 'sales_budget_report'])->name('sme-finance.sales-budget.print'); //actual Route::get('sme-finance/forms/units-actual', [\App\Http\Controllers\SMEFinanceController::class, 'units_actual'])->name('sme-finance.units-actual'); Route::post('sme-finance/forms/units-actual/store', [\App\Http\Controllers\SMEFinanceController::class, 'units_actual_save'])->name('sme-finance.units-actual.store'); Route::get('sme-finance/reports/cos-actual', [\App\Http\Controllers\SMEFinanceController::class, 'cos_actual'])->name('sme-finance.cos-actual'); Route::get('sme-finance/reports/sales-actual', [\App\Http\Controllers\SMEFinanceController::class, 'sales_actual'])->name('sme-finance.sales-actual'); Route::get('sme-finance/reports/cos-actual/print', [\App\Http\Controllers\SMEFinanceController::class, 'cos_actual_report'])->name('sme-finance.cos-actual.print'); Route::get('sme-finance/reports/sales-actual/print', [\App\Http\Controllers\SMEFinanceController::class, 'sales_actual_report'])->name('sme-finance.sales-actual.print'); //budget vs actual Route::get('sme-finance/reports/budget-vs-actual-sales', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_sales'])->name('sme-finance.budget-vs-actual-sales'); Route::get('sme-finance/reports/budget-vs-actual-sales/print', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_sales_report'])->name('sme-finance.budget-vs-actual-sales.print'); Route::get('sme-finance/reports/budget-vs-actual-expenses', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_expenses'])->name('sme-finance.budget-vs-actual-expenses'); Route::get('sme-finance/reports/budget-vs-actual-expenses/print', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_expenses_report'])->name('sme-finance.budget-vs-actual-expenses.print'); //expenses Route::get('sme-finance/forms/expenses', [\App\Http\Controllers\SMEFinanceController::class, 'expenses_show'])->name('sme-finance.expenses'); Route::post('sme-finance/forms/expenses/store', [\App\Http\Controllers\SMEFinanceController::class, 'expenses_save'])->name('sme-finance.expenses.store'); Route::get('sme-finance/forms/expense-budget', [\App\Http\Controllers\SMEFinanceController::class, 'expense_budget'])->name('sme-finance.expense-budget'); Route::post('sme-finance/forms/expense-budget/store', [\App\Http\Controllers\SMEFinanceController::class, 'expense_budget_save'])->name('sme-finance.expense-budget.store'); Route::get('sme-finance/forms/expense-actual', [\App\Http\Controllers\SMEFinanceController::class, 'expense_actual'])->name('sme-finance.expense-actual')->name('sme-finance.expense-actual'); Route::post('sme-finance/forms/expense-actual/store', [\App\Http\Controllers\SMEFinanceController::class, 'expense_actual_save'])->name('sme-finance.expense-actual.store'); //other reports Route::get('sme-finance/reports/income-statement-summary', [\App\Http\Controllers\SMEFinanceController::class, 'income_summary'])->name('sme-finance.income-summary'); Route::get('sme-finance/reports/income-statement-summary/print', [\App\Http\Controllers\SMEFinanceController::class, 'income_summary_report'])->name('sme-finance.income-summary.print'); Route::get('sme-finance/reports/income-statement-detail', [\App\Http\Controllers\SMEFinanceController::class, 'income_detail'])->name('sme-finance.income-detail'); Route::get('sme-finance/reports/income-statement-detail/print', [\App\Http\Controllers\SMEFinanceController::class, 'income_detail_report'])->name('sme-finance.income-detail.print'); Route::get('sme-finance/reports/balance-sheet', [\App\Http\Controllers\SMEFinanceController::class, 'balance_sheet'])->name('sme-finance.balance-sheet'); Route::get('sme-finance/reports/balance-sheet/print', [\App\Http\Controllers\SMEFinanceController::class, 'balance_sheet_report'])->name('sme-finance.balance-sheet.print'); Route::get('sme-finance/reports/cash-flow', [\App\Http\Controllers\SMEFinanceController::class, 'cash_flow'])->name('sme-finance.cash-flow'); Route::get('sme-finance/reports/cash-flow/print', [\App\Http\Controllers\SMEFinanceController::class, 'cash_flow_report'])->name('sme-finance.cash-flow.print'); }); Route::post('manageme/managemebudget/{type}', [\App\Http\Controllers\ManageMeController::class, 'handleCategoryAction'])->middleware('auth'); Route::any('manageme/managemebudget', [\App\Http\Controllers\ManageMeController::class, 'manageMeBudget'])->middleware('auth'); Route::get('manageme', [\App\Http\Controllers\ManageMeController::class, 'index'])->middleware(\App\Http\Middleware\PermissionsMiddleware::class)->middleware('auth'); Route::post('smepersonrole/create/{id}/invite', [\App\Http\Controllers\Auth\InvitationController::class, 'inviteToEnterprise'])->name('enterprise.invite'); Route::get('/emailreports', [\App\Http\Controllers\EmailReportsController::class, 'index'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::post('/emailreports', [\App\Http\Controllers\EmailReportsController::class, 'sendReports'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::get('/notifications', [\App\Http\Controllers\EmailReportsController::class, 'handleNotifications'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); // Route::get('/share', [ShareController::class, 'generateShareableLink'])->name('generateShareableLink'); // Route::get('/links/revoke-access/{id}', [LinksController::class, 'revokeAccess'])->name('links.revoke-access'); // Route::resource('/links', LinksController::class); Route::get('/url-references', [UrlReferenceController::class, 'index'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('debtors', DebtorController::class); }); Route::post('invite/{id}', [\App\Http\Controllers\Auth\InvitationController::class, 'invite'])->name('invite'); Route::get('invite/{id}', [\App\Http\Controllers\Auth\InvitationController::class, 'showInviteForm'])->name('showInviteForm'); // (legacy unscoped auth routes removed 9 Aug 2026 - was matching every domain, superseded by Auth::routes() scoped inside the valyn.net domain groups) Route::get('/profitpilot/manageme', function () { return view('/profitpilot/manageme'); }); Route::get('/manageme-sme', function () { return view('profitpilot.manageme_sme'); })->name('manageme.sme'); Route::get('/manageme-accountant', function () { return view('profitpilot.manageme_accountant'); })->name('manageme.accountant'); Route::get('/manageme-financier', function () { return view('profitpilot.manageme_financier'); })->name('manageme.financier'); Route::get('/point-of-sale', function () { return view('profitpilot.transactP2P'); }); Route::get('/services', function () { return view('profitpilot.products'); })->name('profitpilot.products'); Route::get('/products', function () { return view('profitpilot.products-paid'); })->name('profitpilot.products.paid'); // --- Products admin (interim, same password gate as RedLed/BizWin uploads) --- Route::middleware([\App\Http\Middleware\ContentEditGate::class])->prefix('admin/products')->group(function () { Route::get('/', [\App\Http\Controllers\ProductsAdminController::class, 'index'])->name('admin.products.index'); Route::get('/create', [\App\Http\Controllers\ProductsAdminController::class, 'create'])->name('admin.products.create'); Route::post('/', [\App\Http\Controllers\ProductsAdminController::class, 'store'])->name('admin.products.store'); Route::get('/{id}/edit', [\App\Http\Controllers\ProductsAdminController::class, 'edit'])->name('admin.products.edit'); Route::put('/{id}', [\App\Http\Controllers\ProductsAdminController::class, 'update'])->name('admin.products.update'); Route::delete('/{id}', [\App\Http\Controllers\ProductsAdminController::class, 'destroy'])->name('admin.products.destroy'); }); use App\Http\Controllers\ContactController; use App\Http\Controllers\ValynController; use App\Http\Controllers\DebtorController; use App\Http\Controllers\LinksController; use App\Http\Controllers\ServiceController; use App\Http\Controllers\ShareController; use App\Http\Controllers\UrlReferenceController; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\IncomeStatementController; use App\Http\Controllers\BalanceSheetController; use App\Http\Controllers\UserController; use App\Http\Controllers\RoleController; use App\Http\Controllers\PermissionController; use App\Http\Controllers\TransactionTypesController; use App\Http\Controllers\TransactionsController; use App\Http\Controllers\Regional_tier2Controller; use App\Http\Controllers\Regional_tier1Controller; use App\Http\Controllers\MunicipalityController; use App\Http\Controllers\CityController; use App\Http\Controllers\SicCodesController; use App\Http\Controllers\GinibycountryController; use App\Http\Controllers\GinitrendController; use App\Http\Controllers\PopulationController; use App\Http\Controllers\EmploymentrateController; use App\Http\Controllers\UnemploymentrateController; use App\Http\Controllers\LegalstructureController; use App\Http\Controllers\SophisticationdevelopingController; use App\Http\Controllers\SophisticationdevelopedController; use App\Http\Controllers\NumberofstaffController; use App\Http\Controllers\SophisticationController; use App\Http\Controllers\SophisticationtypeController; use App\Http\Controllers\CountrynameController; use App\Http\Controllers\CountryfactorController; use App\Http\Controllers\CountryeconomicdataController; use App\Http\Controllers\CountryController; use App\Http\Controllers\PersonController; use App\Http\Controllers\EnterprisepersonroleController; use App\Http\Controllers\EnterpriserolesController; use App\Http\Controllers\NonfinancialdataController; use App\Http\Controllers\EnterpriseController; use App\Http\Controllers\BudgetdataController; use App\Http\Controllers\ScoresController; use App\Http\Controllers\ClientsController; use App\Http\Controllers\SubscriptiontypesController; use App\Http\Controllers\SubscriptionRatesController; use App\Http\Controllers\CurrenciesController; //use App\Http\Controllers\ISReportController; //TODO: ISReportController does not exist //use App\Http\Controllers\ISReportDisplayController; use App\Http\Controllers\BSReportController; use App\Http\Controllers\TransactioncategoryController; use App\Http\Kernel; //Route::get('/share/{any}', [ShareController::class, 'viewShared'])->where('any', '.*'); Route::domain('redled.smefactory.net')->group(function () { Route::get('/', [\App\Http\Controllers\RedledController::class, 'home']); }); Route::domain('bizwin.smefactory.net')->group(function () { Route::get('/', [\App\Http\Controllers\BizwinController::class, 'home']); }); Route::domain('count.smefactory.net')->group(function () { Route::get('/', function () { return redirect('/profitpilot/service/cloud-count'); }); }); Route::domain('assess.bemt.net')->group(function () { Route::get('/', function () { return view('assess_bemt.home'); }); }); Route::domain('assess.smefactory.net')->group(function () { Route::get('/', function () { return view('assess_smef.home'); }); }); // ProfitPilot's own content routes are unscoped (registered below, outside // any Route::domain() wrapper), so they already answer profitpilot.biz by // default. This group exists only to give profitpilot.biz its own real, // correctly-branded /login, /register, /password/reset - added 10 Aug 2026, // there was no auth route for this domain at all before this. Route::domain('profitpilot.biz')->group(function () { Auth::routes(['verify' => true]); }); Route::domain('www.profitpilot.biz')->group(function () { Auth::routes(['verify' => true]); }); Route::domain('bemt.net')->group(function () { Route::get('/', [\App\Http\Controllers\BEMTController::class, 'home']); Route::get('/about', function () { return view('bemt.about'); }); Route::get('/ceo', function () { return view('bemt.ceo'); }); Route::get('/clients', function () { return view('bemt.clients'); }); Route::get('/products', function () { $controller = new \App\Http\Controllers\BEMTController(); return view('bemt.products', ['index' => $controller->get_index()]); }); Route::get('/contact', function () { return view('bemt.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Auth::routes(['verify' => true]); Route::get('/subscribe', function () { return view('bemt.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('bemt.cockpit'); }); Route::get('/bemt/index', [\App\Http\Controllers\BEMTController::class, 'index'])->name('bemt.index'); Route::get('/bemt/{title}', [\App\Http\Controllers\BEMTController::class, 'show_content'])->name('bemt.show')->where('title', '.*'); }); Route::domain('www.bemt.net')->group(function () { Route::get('/', [\App\Http\Controllers\BEMTController::class, 'home']); }); Route::domain('smefactory.net')->group(function () { Route::get('/', function () { return view('smefactory.home'); }); Route::get('/about', function () { return view('smefactory.about'); }); Route::get('/ceo', function () { return view('smefactory.ceo'); }); Route::get('/clients', function () { return view('smefactory.clients'); }); Route::get('/products', function () { return view('smefactory.products'); }); Route::get('/contact', function () { return view('smefactory.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Auth::routes(['verify' => true]); Route::get('/subscribe', function () { return view('smefactory.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('smefactory.cockpit'); }); }); Route::domain('www.smefactory.net')->group(function () { Route::get('/', function () { return view('smefactory.home'); }); Route::get('/about', function () { return view('smefactory.about'); }); Route::get('/ceo', function () { return view('smefactory.ceo'); }); Route::get('/clients', function () { return view('smefactory.clients'); }); Route::get('/products', function () { return view('smefactory.products'); }); Route::get('/contact', function () { return view('smefactory.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('smefactory.register'); }); Route::get('/subscribe', function () { return view('smefactory.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('smefactory.cockpit'); }); }); Route::domain('skills2biz.com')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('www.skills2biz.com')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('skills2biz.net')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('www.skills2biz.net')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('startsmart.skills2biz.com')->group(function () { Route::get('/', function () { return view('startsmart.home'); }); Route::get('/about', function () { return view('startsmart.about'); }); Route::get('/ceo', function () { return view('startsmart.ceo'); }); Route::get('/clients', function () { return view('startsmart.clients'); }); Route::get('/products', function () { return view('startsmart.products'); }); Route::get('/contact', function () { return view('startsmart.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('startsmart.register'); }); Route::get('/subscribe', function () { return view('startsmart.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('startsmart.cockpit'); }); Route::get('/dashboard', function () { return redirect('https://valyn.net/dashboard'); }); }); Route::domain('valyn.net')->group(function () { Auth::routes(['verify' => true]); // Real product decision, 13 Aug 2026: "no free accounts" - Valyn's whole // model is pay first via /checkout/{code}, account created automatically // after payment (see StripeCheckoutController). This standalone Register // page predates that 10 Aug pivot and still let anyone create a free // account with no payment, contradicting "nothing on Valyn is free". // Overrides Auth::routes()' own /register (later registration wins on a // duplicate route signature within the same domain), sending visitors to // Products instead, where every path leads through a real checkout. Route::get('/register', function () { return redirect()->route('valyn.products') ->with('flash_message', 'Valyn accounts are created automatically once you subscribe to a product - choose one below to get started.'); })->name('register'); Route::get('/', [ValynController::class, 'home'])->name('valyn.home'); Route::get('/about', [ValynController::class, 'about'])->name('valyn.about'); Route::get('/who-we-serve', [ValynController::class, 'whoWeServe'])->name('valyn.who-we-serve'); Route::get('/our-ceo', [ValynController::class, 'ourCeo'])->name('valyn.our-ceo'); Route::get('/products', [ValynController::class, 'products'])->name('valyn.products'); Route::get('/disclaimer', function () { return view('valyn.disclaimer'); })->name('valyn.disclaimer'); Route::get('/products/valuation-tools', function () { return view('valyn.product-valuation-tools'); })->name('valyn.product-valuation-tools'); Route::get('/play-and-think', function () { return view('valyn.play-and-think'); })->name('valyn.play-and-think'); Route::middleware(['remember-intended', 'auth', 'subscribed:f002|f007'])->group(function () { Route::get('/valuation', [ValynController::class, 'valuation'])->name('valyn.valuation'); Route::post('/valuation/calculate', [ValynController::class, 'valuationCalculate'])->name('valyn.valuation.calculate'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f001|f007'])->group(function () { Route::get('/products/f001/app', [\App\Http\Controllers\RetirementRequirementController::class, 'show'])->name('valyn.products.f001.app'); Route::post('/products/f001/app/calculate', [\App\Http\Controllers\RetirementRequirementController::class, 'calculate'])->name('valyn.products.f001.calculate'); Route::post('/products/f001/app/choose', [\App\Http\Controllers\RetirementRequirementController::class, 'chooseSource'])->name('valyn.products.f001.choose'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f002|f007'])->group(function () { Route::get('/products/f002/app', [\App\Http\Controllers\BusinessValuationController::class, 'show'])->name('valyn.products.f002.app'); Route::post('/products/f002/app/calculate', [\App\Http\Controllers\BusinessValuationController::class, 'calculate'])->name('valyn.products.f002.calculate'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f003|f007'])->group(function () { Route::get('/products/f003/app', [\App\Http\Controllers\RetirementDashboardController::class, 'show'])->name('valyn.products.f003.app'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f005|f007'])->group(function () { Route::get('/products/f005/app', [\App\Http\Controllers\ValynAccountingLinkController::class, 'activate'])->name('valyn.products.f005.app'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f010|f012|f013|f014'])->group(function () { Route::get('/products/f010/app', [\App\Http\Controllers\ProfessionalClientController::class, 'index'])->name('valyn.products.f010.app'); Route::post('/products/f010/app/clients', [\App\Http\Controllers\ProfessionalClientController::class, 'store'])->name('valyn.products.f010.clients.store'); Route::get('/products/f010/app/client/{client}', [\App\Http\Controllers\ProfessionalRetirementController::class, 'show'])->name('valyn.products.f010.client'); Route::post('/products/f010/app/client/{client}/calculate', [\App\Http\Controllers\ProfessionalRetirementController::class, 'calculate'])->name('valyn.products.f010.client.calculate'); Route::post('/products/f010/app/client/{client}/choose', [\App\Http\Controllers\ProfessionalRetirementController::class, 'chooseSource'])->name('valyn.products.f010.client.choose'); Route::post('/products/f010/app/client/{client}/valuation', [\App\Http\Controllers\ClientValuationController::class, 'calculate'])->name('valyn.products.f010.client.valuation.calculate'); }); Route::middleware(['remember-intended', 'auth'])->group(function () { Route::get('/dashboard', function () { return redirect()->route('valyn.products.f003.app'); })->name('valyn.dashboard'); Route::get('/dashboard/register-shareholder', [ValynController::class, 'shareholdingRegisterForm'])->name('valyn.dashboard.shareholding.form'); Route::post('/dashboard/shareholding', [ValynController::class, 'shareholdingRegister'])->name('valyn.dashboard.shareholding'); }); Route::get('/cockpit', function () { return redirect()->route('valyn.cockpits.menu'); })->name('valyn.cockpit'); Route::get('/contact', [ValynController::class, 'contact'])->name('valyn.contact'); Route::post('/contact', [ValynController::class, 'contactSubmit'])->name('valyn.contact.submit'); Route::get('/communications', [ValynController::class, 'communications'])->name('valyn.communications'); Route::post('/communications/subscribe', [ValynController::class, 'subscribe'])->name('valyn.subscribe'); Route::get('/country-data', [\App\Http\Controllers\CountryDataController::class, 'index'])->name('valyn.country-data'); Route::get('/country-data/{code}', [\App\Http\Controllers\CountryDataController::class, 'detail'])->name('valyn.country-data.detail'); Route::get('/products/f001', function () { return view('valyn.products.f001'); })->name('valyn.products.f001'); Route::get('/products/f002', function () { return view('valyn.products.f002'); })->name('valyn.products.f002'); Route::get('/products/f003', function () { return view('valyn.products.f003'); })->name('valyn.products.f003'); Route::get('/products/f004', function () { return view('valyn.products.f004'); })->name('valyn.products.f004'); Route::get('/products/f005', function () { return view('valyn.products.f005'); })->name('valyn.products.f005'); // F008/F009 retired 15 Aug 2026 - merged into F002 (Franchise Y/N branch, // all seven methodologies). Redirects kept so any old link lands on the // real product instead of a 404, actual tool/controller code removed. Route::get('/products/f008', function () { return redirect()->route('valyn.products.f002'); })->name('valyn.products.f008'); Route::get('/products/f009', function () { return redirect()->route('valyn.products.f002'); })->name('valyn.products.f009'); Route::middleware(['remember-intended', 'auth', 'subscribed:f006|f007'])->group(function () { Route::get('/products/f006/app', [\App\Http\Controllers\MonthlyBusinessAnalysisController::class, 'show'])->name('valyn.products.f006.app'); }); Route::get('/products/f006', function () { return view('valyn.products.f006'); })->name('valyn.products.f006'); Route::get('/products/f007', function () { return view('valyn.products.f007'); })->name('valyn.products.f007'); Route::middleware(['remember-intended', 'auth', 'subscribed:f007'])->group(function () { Route::get('/products/f007/welcome', function () { return view('valyn.products.f007-welcome'); })->name('valyn.products.f007.welcome'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f012|f013|f014'])->group(function () { Route::get('/products/f012/welcome', function () { return view('valyn.products.f012-welcome'); })->name('valyn.products.f012.welcome'); }); Route::get('/products/f010', function () { return view('valyn.products.f010'); })->name('valyn.products.f010'); // F011 retired 15 Aug 2026 - merged into F002. Redirect kept so any old // link lands on the real product instead of a 404. Route::get('/products/f011', function () { return redirect()->route('valyn.products.f002'); })->name('valyn.products.f011'); Route::get('/products/f012', function () { return view('valyn.products.f012'); })->name('valyn.products.f012'); Route::get('/products/f013', function () { return redirect()->route('valyn.products.f012'); })->name('valyn.products.f013'); Route::get('/products/f014', function () { return redirect()->route('valyn.products.f012'); })->name('valyn.products.f014'); // Deliberately not auth-gated - buying a subscription must not require an // account first. Stripe Checkout collects the buyer's email itself; the // webhook finds-or-creates the user record after payment succeeds. // Changed 10 Aug 2026 per Rob: "no login until money received." Route::get('/checkout/{code}', [\App\Http\Controllers\StripeCheckoutController::class, 'checkout'])->name('valyn.checkout'); Route::post('/checkout/{code}/email', [\App\Http\Controllers\StripeCheckoutController::class, 'checkoutEmail'])->name('valyn.checkout.email'); Route::get('/checkout/{code}/success', [\App\Http\Controllers\StripeCheckoutController::class, 'success'])->name('valyn.checkout.success'); Route::get('/checkout/{code}/cancel', [\App\Http\Controllers\StripeCheckoutController::class, 'cancel'])->name('valyn.checkout.cancel'); Route::get('/rr-index-lab', [\App\Http\Controllers\RrIndexLabController::class, 'show'])->name('valyn.rr-index-lab'); Route::get('/turnover-impact-lab', [\App\Http\Controllers\TurnoverImpactLabController::class, 'show'])->name('valyn.turnover-impact-lab'); Route::get('/net-profit-growth-lab', [\App\Http\Controllers\NetProfitProjectionLabController::class, 'growth'])->name('valyn.net-profit-growth-lab'); Route::get('/net-profit-scaling-lab', [\App\Http\Controllers\NetProfitProjectionLabController::class, 'scaling'])->name('valyn.net-profit-scaling-lab'); Route::get('/dashboard-lab', [\App\Http\Controllers\DashboardLabController::class, 'show'])->name('valyn.dashboard-lab'); Route::get('/cockpit-gate', [\App\Http\Controllers\CockpitGateController::class, 'show'])->name('cockpit-gate'); Route::post('/cockpit-gate', [\App\Http\Controllers\CockpitGateController::class, 'attempt'])->name('cockpit-gate.attempt'); Route::middleware(['remember-intended', 'auth', 'subscribed:f004|f007'])->group(function () { Route::get('/dashboard-cockpits', [\App\Http\Controllers\CockpitController::class, 'menu'])->name('valyn.cockpits.menu'); Route::get('/cockpit/{type}', [\App\Http\Controllers\CockpitController::class, 'show'])->name('valyn.cockpit.show'); }); }); Route::domain('www.valyn.net')->group(function () { Auth::routes(['verify' => true]); Route::get('/{any?}', function ($any = '') { return redirect('https://valyn.net/' . $any, 301); })->where('any', '.*'); }); Route::get('/', function () { return view('profitpilot.home'); })->name('home'); Route::get('/about', function () { return view('profitpilot.about'); }); Route::get('/contact', [ContactController::class, 'index']); Route::post('/contact/submit', [ContactController::class, 'submit']); Route::get('/our-clients', function () { return view('profitpilot.clients'); }); Route::get('/register', function () { return view('profitpilot.register'); }); Route::get('/ceo', function () { return view('profitpilot.ceo'); }); Route::get('/subscribe', function () { return view('profitpilot.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeProfitpilot']); Route::get('/profitpilot/service/{serviceName}', [ServiceController::class, 'getServices'])->name('service'); Route::get('/profitpilot/advisory_board', function () { return view('/profitpilot/advisory_board'); }); Route::get('/prosport360', function () { return view('profitpilot.prosport360'); })->name('prosport360'); Route::get('products/manageme', function () { return view('products.manageme'); })->name('products.manageme'); Route::get('products/sme-finance', function () { return redirect('/products/manageme'); }); Route::get('/coming-soon', function () { return view('profitpilot.coming_soon', ['item' => request('item', 'This product')]); })->name('coming-soon'); // --- SME Calculators (100-formula reference list) --- Route::get('/sme-calculators', [\App\Http\Controllers\SmeCalculatorsController::class, 'index'])->name('sme-calculators'); // --- Content edit gate (interim, standalone password — proper Roles/Permissions system planned for Supabase) --- Route::get('/content-edit-gate', [\App\Http\Controllers\ContentEditGateController::class, 'show'])->name('content-edit-gate'); Route::post('/content-edit-gate', [\App\Http\Controllers\ContentEditGateController::class, 'attempt'])->name('content-edit-gate.attempt'); // --- RedLed (funding content library) --- Route::get('/redled', [\App\Http\Controllers\RedledController::class, 'home'])->name('redled.home'); Route::get('/redled/index', [\App\Http\Controllers\RedledController::class, 'index'])->name('redled.index'); Route::middleware([\App\Http\Middleware\ContentEditGate::class])->group(function () { Route::get('/redled/upload', [\App\Http\Controllers\RedledController::class, 'upload_view'])->name('redled.upload'); Route::post('/redled/upload-chapter', [\App\Http\Controllers\RedledController::class, 'import'])->name('redled.import'); Route::delete('/redled/delete/{id}', [\App\Http\Controllers\RedledController::class, 'destroy'])->name('redled.destroy'); }); Route::middleware(['auth'])->group(function () { Route::get('/redled/{title}', [\App\Http\Controllers\RedledController::class, 'show_content'])->name('redled.show')->where('title', '.*'); }); // --- BizWin (entrepreneurial self-understanding content library) --- Route::get('/biz-win', [\App\Http\Controllers\BizwinController::class, 'home'])->name('bizwin.home'); Route::get('/bizwin/index', [\App\Http\Controllers\BizwinController::class, 'index'])->name('bizwin.index'); Route::middleware([\App\Http\Middleware\ContentEditGate::class])->group(function () { Route::get('/bizwin/upload', [\App\Http\Controllers\BizwinController::class, 'upload_view'])->name('bizwin.upload'); Route::post('/bizwin/upload-chapter', [\App\Http\Controllers\BizwinController::class, 'import'])->name('bizwin.import'); Route::delete('/bizwin/delete/{id}', [\App\Http\Controllers\BizwinController::class, 'destroy'])->name('bizwin.destroy'); }); Route::middleware(['auth'])->group(function () { Route::get('/bizwin/{title}', [\App\Http\Controllers\BizwinController::class, 'show_content'])->name('bizwin.show')->where('title', '.*'); }); // --- Cloud Count (interactive calculators) --- Route::get('/cloud-count', function () { return redirect('/profitpilot/service/cloud-count'); })->name('cloud-count.home'); Route::middleware(['auth'])->group(function () { Route::get('/calculate-gross', [\App\Http\Controllers\CalculateGrossController::class, 'index'])->name('calculate-gross'); Route::get('/calculate-irrroi', [\App\Http\Controllers\CalculateIRRandROIController::class, 'index'])->name('calculate-irrroi'); Route::get('/calculate-is', [\App\Http\Controllers\CalculateISController::class, 'index'])->name('calculate-is'); Route::get('/sale-analysis', [\App\Http\Controllers\SalesAnalysisController::class, 'index'])->name('sale-analysis'); Route::get('/dupont-analysis', [\App\Http\Controllers\DupontCalculatorController::class, 'index'])->name('dupont-analysis'); Route::get('/client-sales', [\App\Http\Controllers\ClientSalesController::class, 'index'])->name('client-sales'); Route::get('/calculate-selffunded', [\App\Http\Controllers\CalculateSelfFundedGrowthController::class, 'index'])->name('calculate-selffunded'); Route::get('/calculate-assetvaluation', [\App\Http\Controllers\CalculateAssetValuationController::class, 'index'])->name('calculate-assetvaluation'); Route::get('/calculate-ebitda', [\App\Http\Controllers\CalculateEbitdaController::class, 'index'])->name('calculate-ebitda'); Route::get('/calculate-stockinventory', [\App\Http\Controllers\CalculateStockInventoryController::class, 'index'])->name('calculate-stockinventory'); Route::get('/calculate-debtors', [\App\Http\Controllers\CalculateDebtorsController::class, 'index'])->name('calculate-debtors'); Route::get('/calculate-creditors', [\App\Http\Controllers\CalculateCreditorsController::class, 'index'])->name('calculate-creditors'); Route::get('/calculate-inventoryratio', [\App\Http\Controllers\CalculateInventoryRatioController::class, 'index'])->name('calculate-inventoryratio'); Route::get('/calculate-salesratio', [\App\Http\Controllers\CalculateSalesRatioController::class, 'index'])->name('calculate-salesratio'); }); Route::group(['middleware' => ['auth', 'verified']], function () { Route::get('/profit_pilot', [App\Http\Controllers\ProfitPilotController::class, 'index'])->name('profit_pilot'); Route::resource('users', UserController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('roles', RoleController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('permissions', PermissionController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('transaction-types', TransactionTypesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('regional_tier2', Regional_tier2Controller::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('regional_tier1', Regional_tier1Controller::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('municipality', MunicipalityController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('city', CityController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sic-codes', SicCodesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sic-headings', \App\Http\Controllers\SicHeadingController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('ginibycountry', GinibycountryController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('ginitrend', GinitrendController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('population', PopulationController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('employmentrate', EmploymentrateController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('unemploymentrate', UnemploymentrateController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('legalstructure', LegalstructureController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophisticationdeveloping', SophisticationdevelopingController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophisticationdeveloped', SophisticationdevelopedController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('numberofstaff', NumberofstaffController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophistication', SophisticationController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophisticationtype', SophisticationtypeController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryname', CountrynameController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryfactor', CountryfactorController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryeconomicdata', CountryeconomicdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryeconomicdata', CountryeconomicdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('country', CountryController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('person', PersonController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('smeroles', EnterpriserolesController::class)->middleware('auth'); Route::resource('nonfinancialdata', NonfinancialdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::middleware(\App\Http\Middleware\PermissionsMiddleware::class)->group(function () { Route::resource('transactions', TransactionsController::class); Route::get('/correction-transactions/journals', [\App\Http\Controllers\CorrectionTransactionsController::class, 'newJournal']); Route::post('/correction-transactions/journals/store', [\App\Http\Controllers\CorrectionTransactionsController::class, 'journalsStore'])->name('correction_transactions.journals.store'); Route::get('/correction-transactions/credit-notes', [\App\Http\Controllers\CorrectionTransactionsController::class, 'credit']); Route::get('/correction-transactions/debit-notes', [\App\Http\Controllers\CorrectionTransactionsController::class, 'debit']); Route::resource('/correction-transactions', \App\Http\Controllers\CorrectionTransactionsController::class); Route::get('/reports', [\App\Http\Controllers\ReportController::class, 'index']); Route::resource('incomestatement', IncomeStatementController::class); Route::resource('cashflowstatement', \App\Http\Controllers\CashFlowStatementController::class); Route::resource('balancesheet', BalanceSheetController::class); Route::get('/financial-reports', [\App\Http\Controllers\FinancialReportController::class, 'show'])->name('financial.reports'); Route::resource('sme', EnterpriseController::class); Route::resource('smepersonrole', EnterprisepersonroleController::class); }); //Route::resource('enterprise', EnterpriseController::class)->middleware('auth'); try middleware('role:Create Clients'); Route::resource('budgetdata', BudgetdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('scores', ScoresController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('clients', ClientsController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('subscriptiontypes', SubscriptiontypesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('subscription-rates', SubscriptionRatesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('currencies', CurrenciesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('clients', ClientsController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('bsreport', BSReportController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('transactioncategory', TransactioncategoryController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::get('sme-finance', [\App\Http\Controllers\SMEFinanceController::class, 'index'])->middleware('auth')->name('sme-finance.index'); Route::get('sme-finance/forms/product-information', [\App\Http\Controllers\SMEFinanceController::class, 'info'])->name('info'); Route::get('sme-finance/forms/product-information/accept', [\App\Http\Controllers\SMEFinanceController::class, 'info_accept'])->name('info.accept'); Route::get('sme-finance/forms/setup-costs', [\App\Http\Controllers\SMEFinanceController::class, 'setup_costs_show'])->middleware('auth')->name('sme-finance.setup-costs'); Route::get('sme-finance/forms/product-costs', [\App\Http\Controllers\SMEFinanceController::class, 'product_costs_show'])->middleware('auth')->name('sme-finance.product-costs'); Route::post('sme-finance/forms/setup-costs/store', [\App\Http\Controllers\SMEFinanceController::class, 'setup_costs_save'])->middleware('auth')->name('sme-finance.setup-costs.store'); Route::post('sme-finance/forms/product-costs/store', [\App\Http\Controllers\SMEFinanceController::class, 'product_costs_save'])->middleware('auth')->name('sme-finance.product-costs.store'); Route::get('sme-finance/reports/price-list', [\App\Http\Controllers\SMEFinanceController::class, 'price_list'])->middleware('auth')->name('sme-finance.price-list'); Route::get('sme-finance/reports/price-list/print', [\App\Http\Controllers\SMEFinanceController::class, 'price_list_report'])->middleware('auth')->name('sme-finance.price-list.print'); Route::get('sme-finance/reports/price-list-simple', [\App\Http\Controllers\SMEFinanceController::class, 'price_list_simple'])->middleware('auth')->name('sme-finance.price-list-simple'); Route::get('sme-finance/reports/price-list-simple/print', [\App\Http\Controllers\SMEFinanceController::class, 'price_list_simple_report'])->middleware('auth')->name('sme-finance.price-list-simple.print'); Route::middleware('auth')->group(function () { //budget Route::get('sme-finance/forms/units-budget', [\App\Http\Controllers\SMEFinanceController::class, 'units_budget'])->name('sme-finance.units-budget'); Route::post('sme-finance/forms/units-budget/store', [\App\Http\Controllers\SMEFinanceController::class, 'units_budget_save'])->name('sme-finance.units-budget.store'); Route::get('sme-finance/reports/cos-budget', [\App\Http\Controllers\SMEFinanceController::class, 'cos_budget'])->name('sme-finance.cos-budget'); Route::get('sme-finance/reports/sales-budget', [\App\Http\Controllers\SMEFinanceController::class, 'sales_budget'])->name('sme-finance.sales-budget'); Route::get('sme-finance/reports/cos-budget/print', [\App\Http\Controllers\SMEFinanceController::class, 'cos_budget_report'])->name('sme-finance.cos-budget.print'); Route::get('sme-finance/reports/sales-budget/print', [\App\Http\Controllers\SMEFinanceController::class, 'sales_budget_report'])->name('sme-finance.sales-budget.print'); //actual Route::get('sme-finance/forms/units-actual', [\App\Http\Controllers\SMEFinanceController::class, 'units_actual'])->name('sme-finance.units-actual'); Route::post('sme-finance/forms/units-actual/store', [\App\Http\Controllers\SMEFinanceController::class, 'units_actual_save'])->name('sme-finance.units-actual.store'); Route::get('sme-finance/reports/cos-actual', [\App\Http\Controllers\SMEFinanceController::class, 'cos_actual'])->name('sme-finance.cos-actual'); Route::get('sme-finance/reports/sales-actual', [\App\Http\Controllers\SMEFinanceController::class, 'sales_actual'])->name('sme-finance.sales-actual'); Route::get('sme-finance/reports/cos-actual/print', [\App\Http\Controllers\SMEFinanceController::class, 'cos_actual_report'])->name('sme-finance.cos-actual.print'); Route::get('sme-finance/reports/sales-actual/print', [\App\Http\Controllers\SMEFinanceController::class, 'sales_actual_report'])->name('sme-finance.sales-actual.print'); //budget vs actual Route::get('sme-finance/reports/budget-vs-actual-sales', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_sales'])->name('sme-finance.budget-vs-actual-sales'); Route::get('sme-finance/reports/budget-vs-actual-sales/print', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_sales_report'])->name('sme-finance.budget-vs-actual-sales.print'); Route::get('sme-finance/reports/budget-vs-actual-expenses', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_expenses'])->name('sme-finance.budget-vs-actual-expenses'); Route::get('sme-finance/reports/budget-vs-actual-expenses/print', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_expenses_report'])->name('sme-finance.budget-vs-actual-expenses.print'); //expenses Route::get('sme-finance/forms/expenses', [\App\Http\Controllers\SMEFinanceController::class, 'expenses_show'])->name('sme-finance.expenses'); Route::post('sme-finance/forms/expenses/store', [\App\Http\Controllers\SMEFinanceController::class, 'expenses_save'])->name('sme-finance.expenses.store'); Route::get('sme-finance/forms/expense-budget', [\App\Http\Controllers\SMEFinanceController::class, 'expense_budget'])->name('sme-finance.expense-budget'); Route::post('sme-finance/forms/expense-budget/store', [\App\Http\Controllers\SMEFinanceController::class, 'expense_budget_save'])->name('sme-finance.expense-budget.store'); Route::get('sme-finance/forms/expense-actual', [\App\Http\Controllers\SMEFinanceController::class, 'expense_actual'])->name('sme-finance.expense-actual')->name('sme-finance.expense-actual'); Route::post('sme-finance/forms/expense-actual/store', [\App\Http\Controllers\SMEFinanceController::class, 'expense_actual_save'])->name('sme-finance.expense-actual.store'); //other reports Route::get('sme-finance/reports/income-statement-summary', [\App\Http\Controllers\SMEFinanceController::class, 'income_summary'])->name('sme-finance.income-summary'); Route::get('sme-finance/reports/income-statement-summary/print', [\App\Http\Controllers\SMEFinanceController::class, 'income_summary_report'])->name('sme-finance.income-summary.print'); Route::get('sme-finance/reports/income-statement-detail', [\App\Http\Controllers\SMEFinanceController::class, 'income_detail'])->name('sme-finance.income-detail'); Route::get('sme-finance/reports/income-statement-detail/print', [\App\Http\Controllers\SMEFinanceController::class, 'income_detail_report'])->name('sme-finance.income-detail.print'); Route::get('sme-finance/reports/balance-sheet', [\App\Http\Controllers\SMEFinanceController::class, 'balance_sheet'])->name('sme-finance.balance-sheet'); Route::get('sme-finance/reports/balance-sheet/print', [\App\Http\Controllers\SMEFinanceController::class, 'balance_sheet_report'])->name('sme-finance.balance-sheet.print'); Route::get('sme-finance/reports/cash-flow', [\App\Http\Controllers\SMEFinanceController::class, 'cash_flow'])->name('sme-finance.cash-flow'); Route::get('sme-finance/reports/cash-flow/print', [\App\Http\Controllers\SMEFinanceController::class, 'cash_flow_report'])->name('sme-finance.cash-flow.print'); }); Route::post('manageme/managemebudget/{type}', [\App\Http\Controllers\ManageMeController::class, 'handleCategoryAction'])->middleware('auth'); Route::any('manageme/managemebudget', [\App\Http\Controllers\ManageMeController::class, 'manageMeBudget'])->middleware('auth'); Route::get('manageme', [\App\Http\Controllers\ManageMeController::class, 'index'])->middleware(\App\Http\Middleware\PermissionsMiddleware::class)->middleware('auth'); Route::post('smepersonrole/create/{id}/invite', [\App\Http\Controllers\Auth\InvitationController::class, 'inviteToEnterprise'])->name('enterprise.invite'); Route::get('/emailreports', [\App\Http\Controllers\EmailReportsController::class, 'index'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::post('/emailreports', [\App\Http\Controllers\EmailReportsController::class, 'sendReports'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::get('/notifications', [\App\Http\Controllers\EmailReportsController::class, 'handleNotifications'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); // Route::get('/share', [ShareController::class, 'generateShareableLink'])->name('generateShareableLink'); // Route::get('/links/revoke-access/{id}', [LinksController::class, 'revokeAccess'])->name('links.revoke-access'); // Route::resource('/links', LinksController::class); Route::get('/url-references', [UrlReferenceController::class, 'index'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('debtors', DebtorController::class); }); Route::post('invite/{id}', [\App\Http\Controllers\Auth\InvitationController::class, 'invite'])->name('invite'); Route::get('invite/{id}', [\App\Http\Controllers\Auth\InvitationController::class, 'showInviteForm'])->name('showInviteForm'); // (legacy unscoped auth routes removed 9 Aug 2026 - was matching every domain, superseded by Auth::routes() scoped inside the valyn.net domain groups) Route::get('/profitpilot/manageme', function () { return view('/profitpilot/manageme'); }); Route::get('/manageme-sme', function () { return view('profitpilot.manageme_sme'); })->name('manageme.sme'); Route::get('/manageme-accountant', function () { return view('profitpilot.manageme_accountant'); })->name('manageme.accountant'); Route::get('/manageme-financier', function () { return view('profitpilot.manageme_financier'); })->name('manageme.financier'); Route::get('/point-of-sale', function () { return view('profitpilot.transactP2P'); }); Route::get('/services', function () { return view('profitpilot.products'); })->name('profitpilot.products'); Route::get('/products', function () { return view('profitpilot.products-paid'); })->name('profitpilot.products.paid'); // --- Products admin (interim, same password gate as RedLed/BizWin uploads) --- Route::middleware([\App\Http\Middleware\ContentEditGate::class])->prefix('admin/products')->group(function () { Route::get('/', [\App\Http\Controllers\ProductsAdminController::class, 'index'])->name('admin.products.index'); Route::get('/create', [\App\Http\Controllers\ProductsAdminController::class, 'create'])->name('admin.products.create'); Route::post('/', [\App\Http\Controllers\ProductsAdminController::class, 'store'])->name('admin.products.store'); Route::get('/{id}/edit', [\App\Http\Controllers\ProductsAdminController::class, 'edit'])->name('admin.products.edit'); Route::put('/{id}', [\App\Http\Controllers\ProductsAdminController::class, 'update'])->name('admin.products.update'); Route::delete('/{id}', [\App\Http\Controllers\ProductsAdminController::class, 'destroy'])->name('admin.products.destroy'); }); use App\Http\Controllers\ContactController; use App\Http\Controllers\ValynController; use App\Http\Controllers\DebtorController; use App\Http\Controllers\LinksController; use App\Http\Controllers\ServiceController; use App\Http\Controllers\ShareController; use App\Http\Controllers\UrlReferenceController; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\IncomeStatementController; use App\Http\Controllers\BalanceSheetController; use App\Http\Controllers\UserController; use App\Http\Controllers\RoleController; use App\Http\Controllers\PermissionController; use App\Http\Controllers\TransactionTypesController; use App\Http\Controllers\TransactionsController; use App\Http\Controllers\Regional_tier2Controller; use App\Http\Controllers\Regional_tier1Controller; use App\Http\Controllers\MunicipalityController; use App\Http\Controllers\CityController; use App\Http\Controllers\SicCodesController; use App\Http\Controllers\GinibycountryController; use App\Http\Controllers\GinitrendController; use App\Http\Controllers\PopulationController; use App\Http\Controllers\EmploymentrateController; use App\Http\Controllers\UnemploymentrateController; use App\Http\Controllers\LegalstructureController; use App\Http\Controllers\SophisticationdevelopingController; use App\Http\Controllers\SophisticationdevelopedController; use App\Http\Controllers\NumberofstaffController; use App\Http\Controllers\SophisticationController; use App\Http\Controllers\SophisticationtypeController; use App\Http\Controllers\CountrynameController; use App\Http\Controllers\CountryfactorController; use App\Http\Controllers\CountryeconomicdataController; use App\Http\Controllers\CountryController; use App\Http\Controllers\PersonController; use App\Http\Controllers\EnterprisepersonroleController; use App\Http\Controllers\EnterpriserolesController; use App\Http\Controllers\NonfinancialdataController; use App\Http\Controllers\EnterpriseController; use App\Http\Controllers\BudgetdataController; use App\Http\Controllers\ScoresController; use App\Http\Controllers\ClientsController; use App\Http\Controllers\SubscriptiontypesController; use App\Http\Controllers\SubscriptionRatesController; use App\Http\Controllers\CurrenciesController; //use App\Http\Controllers\ISReportController; //TODO: ISReportController does not exist //use App\Http\Controllers\ISReportDisplayController; use App\Http\Controllers\BSReportController; use App\Http\Controllers\TransactioncategoryController; use App\Http\Kernel; //Route::get('/share/{any}', [ShareController::class, 'viewShared'])->where('any', '.*'); Route::domain('redled.smefactory.net')->group(function () { Route::get('/', [\App\Http\Controllers\RedledController::class, 'home']); }); Route::domain('bizwin.smefactory.net')->group(function () { Route::get('/', [\App\Http\Controllers\BizwinController::class, 'home']); }); Route::domain('count.smefactory.net')->group(function () { Route::get('/', function () { return redirect('/profitpilot/service/cloud-count'); }); }); Route::domain('assess.bemt.net')->group(function () { Route::get('/', function () { return view('assess_bemt.home'); }); }); Route::domain('assess.smefactory.net')->group(function () { Route::get('/', function () { return view('assess_smef.home'); }); }); // ProfitPilot's own content routes are unscoped (registered below, outside // any Route::domain() wrapper), so they already answer profitpilot.biz by // default. This group exists only to give profitpilot.biz its own real, // correctly-branded /login, /register, /password/reset - added 10 Aug 2026, // there was no auth route for this domain at all before this. Route::domain('profitpilot.biz')->group(function () { Auth::routes(['verify' => true]); }); Route::domain('www.profitpilot.biz')->group(function () { Auth::routes(['verify' => true]); }); Route::domain('bemt.net')->group(function () { Route::get('/', [\App\Http\Controllers\BEMTController::class, 'home']); Route::get('/about', function () { return view('bemt.about'); }); Route::get('/ceo', function () { return view('bemt.ceo'); }); Route::get('/clients', function () { return view('bemt.clients'); }); Route::get('/products', function () { $controller = new \App\Http\Controllers\BEMTController(); return view('bemt.products', ['index' => $controller->get_index()]); }); Route::get('/contact', function () { return view('bemt.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Auth::routes(['verify' => true]); Route::get('/subscribe', function () { return view('bemt.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('bemt.cockpit'); }); Route::get('/bemt/index', [\App\Http\Controllers\BEMTController::class, 'index'])->name('bemt.index'); Route::get('/bemt/{title}', [\App\Http\Controllers\BEMTController::class, 'show_content'])->name('bemt.show')->where('title', '.*'); }); Route::domain('www.bemt.net')->group(function () { Route::get('/', [\App\Http\Controllers\BEMTController::class, 'home']); }); Route::domain('smefactory.net')->group(function () { Route::get('/', function () { return view('smefactory.home'); }); Route::get('/about', function () { return view('smefactory.about'); }); Route::get('/ceo', function () { return view('smefactory.ceo'); }); Route::get('/clients', function () { return view('smefactory.clients'); }); Route::get('/products', function () { return view('smefactory.products'); }); Route::get('/contact', function () { return view('smefactory.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Auth::routes(['verify' => true]); Route::get('/subscribe', function () { return view('smefactory.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('smefactory.cockpit'); }); }); Route::domain('www.smefactory.net')->group(function () { Route::get('/', function () { return view('smefactory.home'); }); Route::get('/about', function () { return view('smefactory.about'); }); Route::get('/ceo', function () { return view('smefactory.ceo'); }); Route::get('/clients', function () { return view('smefactory.clients'); }); Route::get('/products', function () { return view('smefactory.products'); }); Route::get('/contact', function () { return view('smefactory.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('smefactory.register'); }); Route::get('/subscribe', function () { return view('smefactory.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('smefactory.cockpit'); }); }); Route::domain('skills2biz.com')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('www.skills2biz.com')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('skills2biz.net')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('www.skills2biz.net')->group(function () { Route::get('/', function () { return view('skills2biz.home'); }); Route::get('/ceo', function () { return view('skills2biz.ceo'); }); Route::get('/about', function () { return view('skills2biz.about'); }); Route::get('/approach', function () { return view('skills2biz.approach'); }); Route::get('/clients', function () { return view('skills2biz.clients'); }); Route::get('/products', function () { return view('skills2biz.products'); }); Route::get('/contact', function () { return view('skills2biz.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('skills2biz.register'); }); Route::get('/subscribe', function () { return view('skills2biz.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); }); Route::domain('startsmart.skills2biz.com')->group(function () { Route::get('/', function () { return view('startsmart.home'); }); Route::get('/about', function () { return view('startsmart.about'); }); Route::get('/ceo', function () { return view('startsmart.ceo'); }); Route::get('/clients', function () { return view('startsmart.clients'); }); Route::get('/products', function () { return view('startsmart.products'); }); Route::get('/contact', function () { return view('startsmart.contact'); }); Route::post('/contact', [\App\Http\Controllers\SiteContactController::class, 'submit']); Route::get('/register', function () { return view('startsmart.register'); }); Route::get('/subscribe', function () { return view('startsmart.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeSkills2biz']); Route::get('/cockpit', function () { return view('startsmart.cockpit'); }); Route::get('/dashboard', function () { return redirect('https://valyn.net/dashboard'); }); }); Route::domain('valyn.net')->group(function () { Auth::routes(['verify' => true]); // Real product decision, 13 Aug 2026: "no free accounts" - Valyn's whole // model is pay first via /checkout/{code}, account created automatically // after payment (see StripeCheckoutController). This standalone Register // page predates that 10 Aug pivot and still let anyone create a free // account with no payment, contradicting "nothing on Valyn is free". // Overrides Auth::routes()' own /register (later registration wins on a // duplicate route signature within the same domain), sending visitors to // Products instead, where every path leads through a real checkout. Route::get('/register', function () { return redirect()->route('valyn.products') ->with('flash_message', 'Valyn accounts are created automatically once you subscribe to a product - choose one below to get started.'); })->name('register'); Route::get('/', [ValynController::class, 'home'])->name('valyn.home'); Route::get('/about', [ValynController::class, 'about'])->name('valyn.about'); Route::get('/who-we-serve', [ValynController::class, 'whoWeServe'])->name('valyn.who-we-serve'); Route::get('/our-ceo', [ValynController::class, 'ourCeo'])->name('valyn.our-ceo'); Route::get('/products', [ValynController::class, 'products'])->name('valyn.products'); Route::get('/disclaimer', function () { return view('valyn.disclaimer'); })->name('valyn.disclaimer'); Route::get('/products/valuation-tools', function () { return view('valyn.product-valuation-tools'); })->name('valyn.product-valuation-tools'); Route::get('/play-and-think', function () { return view('valyn.play-and-think'); })->name('valyn.play-and-think'); Route::middleware(['remember-intended', 'auth', 'subscribed:f002|f007'])->group(function () { Route::get('/valuation', [ValynController::class, 'valuation'])->name('valyn.valuation'); Route::post('/valuation/calculate', [ValynController::class, 'valuationCalculate'])->name('valyn.valuation.calculate'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f001|f007'])->group(function () { Route::get('/products/f001/app', [\App\Http\Controllers\RetirementRequirementController::class, 'show'])->name('valyn.products.f001.app'); Route::post('/products/f001/app/calculate', [\App\Http\Controllers\RetirementRequirementController::class, 'calculate'])->name('valyn.products.f001.calculate'); Route::post('/products/f001/app/choose', [\App\Http\Controllers\RetirementRequirementController::class, 'chooseSource'])->name('valyn.products.f001.choose'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f002|f007'])->group(function () { Route::get('/products/f002/app', [\App\Http\Controllers\BusinessValuationController::class, 'show'])->name('valyn.products.f002.app'); Route::post('/products/f002/app/calculate', [\App\Http\Controllers\BusinessValuationController::class, 'calculate'])->name('valyn.products.f002.calculate'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f003|f007'])->group(function () { Route::get('/products/f003/app', [\App\Http\Controllers\RetirementDashboardController::class, 'show'])->name('valyn.products.f003.app'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f005|f007'])->group(function () { Route::get('/products/f005/app', [\App\Http\Controllers\ValynAccountingLinkController::class, 'activate'])->name('valyn.products.f005.app'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f010|f012|f013|f014'])->group(function () { Route::get('/products/f010/app', [\App\Http\Controllers\ProfessionalClientController::class, 'index'])->name('valyn.products.f010.app'); Route::post('/products/f010/app/clients', [\App\Http\Controllers\ProfessionalClientController::class, 'store'])->name('valyn.products.f010.clients.store'); Route::get('/products/f010/app/client/{client}', [\App\Http\Controllers\ProfessionalRetirementController::class, 'show'])->name('valyn.products.f010.client'); Route::post('/products/f010/app/client/{client}/calculate', [\App\Http\Controllers\ProfessionalRetirementController::class, 'calculate'])->name('valyn.products.f010.client.calculate'); Route::post('/products/f010/app/client/{client}/choose', [\App\Http\Controllers\ProfessionalRetirementController::class, 'chooseSource'])->name('valyn.products.f010.client.choose'); Route::post('/products/f010/app/client/{client}/valuation', [\App\Http\Controllers\ClientValuationController::class, 'calculate'])->name('valyn.products.f010.client.valuation.calculate'); }); Route::middleware(['remember-intended', 'auth'])->group(function () { Route::get('/dashboard', function () { return redirect()->route('valyn.products.f003.app'); })->name('valyn.dashboard'); Route::get('/dashboard/register-shareholder', [ValynController::class, 'shareholdingRegisterForm'])->name('valyn.dashboard.shareholding.form'); Route::post('/dashboard/shareholding', [ValynController::class, 'shareholdingRegister'])->name('valyn.dashboard.shareholding'); }); Route::get('/cockpit', function () { return redirect()->route('valyn.cockpits.menu'); })->name('valyn.cockpit'); Route::get('/contact', [ValynController::class, 'contact'])->name('valyn.contact'); Route::post('/contact', [ValynController::class, 'contactSubmit'])->name('valyn.contact.submit'); Route::get('/communications', [ValynController::class, 'communications'])->name('valyn.communications'); Route::post('/communications/subscribe', [ValynController::class, 'subscribe'])->name('valyn.subscribe'); Route::get('/country-data', [\App\Http\Controllers\CountryDataController::class, 'index'])->name('valyn.country-data'); Route::get('/country-data/{code}', [\App\Http\Controllers\CountryDataController::class, 'detail'])->name('valyn.country-data.detail'); Route::get('/products/f001', function () { return view('valyn.products.f001'); })->name('valyn.products.f001'); Route::get('/products/f002', function () { return view('valyn.products.f002'); })->name('valyn.products.f002'); Route::get('/products/f003', function () { return view('valyn.products.f003'); })->name('valyn.products.f003'); Route::get('/products/f004', function () { return view('valyn.products.f004'); })->name('valyn.products.f004'); Route::get('/products/f005', function () { return view('valyn.products.f005'); })->name('valyn.products.f005'); // F008/F009 retired 15 Aug 2026 - merged into F002 (Franchise Y/N branch, // all seven methodologies). Redirects kept so any old link lands on the // real product instead of a 404, actual tool/controller code removed. Route::get('/products/f008', function () { return redirect()->route('valyn.products.f002'); })->name('valyn.products.f008'); Route::get('/products/f009', function () { return redirect()->route('valyn.products.f002'); })->name('valyn.products.f009'); Route::middleware(['remember-intended', 'auth', 'subscribed:f006|f007'])->group(function () { Route::get('/products/f006/app', [\App\Http\Controllers\MonthlyBusinessAnalysisController::class, 'show'])->name('valyn.products.f006.app'); }); Route::get('/products/f006', function () { return view('valyn.products.f006'); })->name('valyn.products.f006'); Route::get('/products/f007', function () { return view('valyn.products.f007'); })->name('valyn.products.f007'); Route::middleware(['remember-intended', 'auth', 'subscribed:f007'])->group(function () { Route::get('/products/f007/welcome', function () { return view('valyn.products.f007-welcome'); })->name('valyn.products.f007.welcome'); }); Route::middleware(['remember-intended', 'auth', 'subscribed:f012|f013|f014'])->group(function () { Route::get('/products/f012/welcome', function () { return view('valyn.products.f012-welcome'); })->name('valyn.products.f012.welcome'); }); Route::get('/products/f010', function () { return view('valyn.products.f010'); })->name('valyn.products.f010'); // F011 retired 15 Aug 2026 - merged into F002. Redirect kept so any old // link lands on the real product instead of a 404. Route::get('/products/f011', function () { return redirect()->route('valyn.products.f002'); })->name('valyn.products.f011'); Route::get('/products/f012', function () { return view('valyn.products.f012'); })->name('valyn.products.f012'); Route::get('/products/f013', function () { return redirect()->route('valyn.products.f012'); })->name('valyn.products.f013'); Route::get('/products/f014', function () { return redirect()->route('valyn.products.f012'); })->name('valyn.products.f014'); // Deliberately not auth-gated - buying a subscription must not require an // account first. Stripe Checkout collects the buyer's email itself; the // webhook finds-or-creates the user record after payment succeeds. // Changed 10 Aug 2026 per Rob: "no login until money received." Route::get('/checkout/{code}', [\App\Http\Controllers\StripeCheckoutController::class, 'checkout'])->name('valyn.checkout'); Route::post('/checkout/{code}/email', [\App\Http\Controllers\StripeCheckoutController::class, 'checkoutEmail'])->name('valyn.checkout.email'); Route::get('/checkout/{code}/success', [\App\Http\Controllers\StripeCheckoutController::class, 'success'])->name('valyn.checkout.success'); Route::get('/checkout/{code}/cancel', [\App\Http\Controllers\StripeCheckoutController::class, 'cancel'])->name('valyn.checkout.cancel'); Route::get('/rr-index-lab', [\App\Http\Controllers\RrIndexLabController::class, 'show'])->name('valyn.rr-index-lab'); Route::get('/turnover-impact-lab', [\App\Http\Controllers\TurnoverImpactLabController::class, 'show'])->name('valyn.turnover-impact-lab'); Route::get('/net-profit-growth-lab', [\App\Http\Controllers\NetProfitProjectionLabController::class, 'growth'])->name('valyn.net-profit-growth-lab'); Route::get('/net-profit-scaling-lab', [\App\Http\Controllers\NetProfitProjectionLabController::class, 'scaling'])->name('valyn.net-profit-scaling-lab'); Route::get('/dashboard-lab', [\App\Http\Controllers\DashboardLabController::class, 'show'])->name('valyn.dashboard-lab'); Route::get('/cockpit-gate', [\App\Http\Controllers\CockpitGateController::class, 'show'])->name('cockpit-gate'); Route::post('/cockpit-gate', [\App\Http\Controllers\CockpitGateController::class, 'attempt'])->name('cockpit-gate.attempt'); Route::middleware(['remember-intended', 'auth', 'subscribed:f004|f007'])->group(function () { Route::get('/dashboard-cockpits', [\App\Http\Controllers\CockpitController::class, 'menu'])->name('valyn.cockpits.menu'); Route::get('/cockpit/{type}', [\App\Http\Controllers\CockpitController::class, 'show'])->name('valyn.cockpit.show'); }); }); Route::domain('www.valyn.net')->group(function () { Auth::routes(['verify' => true]); Route::get('/{any?}', function ($any = '') { return redirect('https://valyn.net/' . $any, 301); })->where('any', '.*'); }); Route::get('/', function () { return view('profitpilot.home'); })->name('home'); Route::get('/about', function () { return view('profitpilot.about'); }); Route::get('/contact', [ContactController::class, 'index']); Route::post('/contact/submit', [ContactController::class, 'submit']); Route::get('/our-clients', function () { return view('profitpilot.clients'); }); Route::get('/register', function () { return view('profitpilot.register'); }); Route::get('/ceo', function () { return view('profitpilot.ceo'); }); Route::get('/subscribe', function () { return view('profitpilot.subscribe'); }); Route::post('/subscribe', [App\Http\Controllers\NewsletterController::class, 'subscribeProfitpilot']); Route::get('/profitpilot/service/{serviceName}', [ServiceController::class, 'getServices'])->name('service'); Route::get('/profitpilot/advisory_board', function () { return view('/profitpilot/advisory_board'); }); Route::get('/prosport360', function () { return view('profitpilot.prosport360'); })->name('prosport360'); Route::get('products/manageme', function () { return view('products.manageme'); })->name('products.manageme'); Route::get('products/sme-finance', function () { return redirect('/products/manageme'); }); Route::get('/coming-soon', function () { return view('profitpilot.coming_soon', ['item' => request('item', 'This product')]); })->name('coming-soon'); // --- SME Calculators (100-formula reference list) --- Route::get('/sme-calculators', [\App\Http\Controllers\SmeCalculatorsController::class, 'index'])->name('sme-calculators'); // --- Content edit gate (interim, standalone password — proper Roles/Permissions system planned for Supabase) --- Route::get('/content-edit-gate', [\App\Http\Controllers\ContentEditGateController::class, 'show'])->name('content-edit-gate'); Route::post('/content-edit-gate', [\App\Http\Controllers\ContentEditGateController::class, 'attempt'])->name('content-edit-gate.attempt'); // --- RedLed (funding content library) --- Route::get('/redled', [\App\Http\Controllers\RedledController::class, 'home'])->name('redled.home'); Route::get('/redled/index', [\App\Http\Controllers\RedledController::class, 'index'])->name('redled.index'); Route::middleware([\App\Http\Middleware\ContentEditGate::class])->group(function () { Route::get('/redled/upload', [\App\Http\Controllers\RedledController::class, 'upload_view'])->name('redled.upload'); Route::post('/redled/upload-chapter', [\App\Http\Controllers\RedledController::class, 'import'])->name('redled.import'); Route::delete('/redled/delete/{id}', [\App\Http\Controllers\RedledController::class, 'destroy'])->name('redled.destroy'); }); Route::middleware(['auth'])->group(function () { Route::get('/redled/{title}', [\App\Http\Controllers\RedledController::class, 'show_content'])->name('redled.show')->where('title', '.*'); }); // --- BizWin (entrepreneurial self-understanding content library) --- Route::get('/biz-win', [\App\Http\Controllers\BizwinController::class, 'home'])->name('bizwin.home'); Route::get('/bizwin/index', [\App\Http\Controllers\BizwinController::class, 'index'])->name('bizwin.index'); Route::middleware([\App\Http\Middleware\ContentEditGate::class])->group(function () { Route::get('/bizwin/upload', [\App\Http\Controllers\BizwinController::class, 'upload_view'])->name('bizwin.upload'); Route::post('/bizwin/upload-chapter', [\App\Http\Controllers\BizwinController::class, 'import'])->name('bizwin.import'); Route::delete('/bizwin/delete/{id}', [\App\Http\Controllers\BizwinController::class, 'destroy'])->name('bizwin.destroy'); }); Route::middleware(['auth'])->group(function () { Route::get('/bizwin/{title}', [\App\Http\Controllers\BizwinController::class, 'show_content'])->name('bizwin.show')->where('title', '.*'); }); // --- Cloud Count (interactive calculators) --- Route::get('/cloud-count', function () { return redirect('/profitpilot/service/cloud-count'); })->name('cloud-count.home'); Route::middleware(['auth'])->group(function () { Route::get('/calculate-gross', [\App\Http\Controllers\CalculateGrossController::class, 'index'])->name('calculate-gross'); Route::get('/calculate-irrroi', [\App\Http\Controllers\CalculateIRRandROIController::class, 'index'])->name('calculate-irrroi'); Route::get('/calculate-is', [\App\Http\Controllers\CalculateISController::class, 'index'])->name('calculate-is'); Route::get('/sale-analysis', [\App\Http\Controllers\SalesAnalysisController::class, 'index'])->name('sale-analysis'); Route::get('/dupont-analysis', [\App\Http\Controllers\DupontCalculatorController::class, 'index'])->name('dupont-analysis'); Route::get('/client-sales', [\App\Http\Controllers\ClientSalesController::class, 'index'])->name('client-sales'); Route::get('/calculate-selffunded', [\App\Http\Controllers\CalculateSelfFundedGrowthController::class, 'index'])->name('calculate-selffunded'); Route::get('/calculate-assetvaluation', [\App\Http\Controllers\CalculateAssetValuationController::class, 'index'])->name('calculate-assetvaluation'); Route::get('/calculate-ebitda', [\App\Http\Controllers\CalculateEbitdaController::class, 'index'])->name('calculate-ebitda'); Route::get('/calculate-stockinventory', [\App\Http\Controllers\CalculateStockInventoryController::class, 'index'])->name('calculate-stockinventory'); Route::get('/calculate-debtors', [\App\Http\Controllers\CalculateDebtorsController::class, 'index'])->name('calculate-debtors'); Route::get('/calculate-creditors', [\App\Http\Controllers\CalculateCreditorsController::class, 'index'])->name('calculate-creditors'); Route::get('/calculate-inventoryratio', [\App\Http\Controllers\CalculateInventoryRatioController::class, 'index'])->name('calculate-inventoryratio'); Route::get('/calculate-salesratio', [\App\Http\Controllers\CalculateSalesRatioController::class, 'index'])->name('calculate-salesratio'); }); Route::group(['middleware' => ['auth', 'verified']], function () { Route::get('/profit_pilot', [App\Http\Controllers\ProfitPilotController::class, 'index'])->name('profit_pilot'); Route::resource('users', UserController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('roles', RoleController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('permissions', PermissionController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('transaction-types', TransactionTypesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('regional_tier2', Regional_tier2Controller::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('regional_tier1', Regional_tier1Controller::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('municipality', MunicipalityController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('city', CityController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sic-codes', SicCodesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sic-headings', \App\Http\Controllers\SicHeadingController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('ginibycountry', GinibycountryController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('ginitrend', GinitrendController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('population', PopulationController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('employmentrate', EmploymentrateController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('unemploymentrate', UnemploymentrateController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('legalstructure', LegalstructureController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophisticationdeveloping', SophisticationdevelopingController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophisticationdeveloped', SophisticationdevelopedController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('numberofstaff', NumberofstaffController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophistication', SophisticationController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('sophisticationtype', SophisticationtypeController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryname', CountrynameController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryfactor', CountryfactorController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryeconomicdata', CountryeconomicdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('countryeconomicdata', CountryeconomicdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('country', CountryController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('person', PersonController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('smeroles', EnterpriserolesController::class)->middleware('auth'); Route::resource('nonfinancialdata', NonfinancialdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::middleware(\App\Http\Middleware\PermissionsMiddleware::class)->group(function () { Route::resource('transactions', TransactionsController::class); Route::get('/correction-transactions/journals', [\App\Http\Controllers\CorrectionTransactionsController::class, 'newJournal']); Route::post('/correction-transactions/journals/store', [\App\Http\Controllers\CorrectionTransactionsController::class, 'journalsStore'])->name('correction_transactions.journals.store'); Route::get('/correction-transactions/credit-notes', [\App\Http\Controllers\CorrectionTransactionsController::class, 'credit']); Route::get('/correction-transactions/debit-notes', [\App\Http\Controllers\CorrectionTransactionsController::class, 'debit']); Route::resource('/correction-transactions', \App\Http\Controllers\CorrectionTransactionsController::class); Route::get('/reports', [\App\Http\Controllers\ReportController::class, 'index']); Route::resource('incomestatement', IncomeStatementController::class); Route::resource('cashflowstatement', \App\Http\Controllers\CashFlowStatementController::class); Route::resource('balancesheet', BalanceSheetController::class); Route::get('/financial-reports', [\App\Http\Controllers\FinancialReportController::class, 'show'])->name('financial.reports'); Route::resource('sme', EnterpriseController::class); Route::resource('smepersonrole', EnterprisepersonroleController::class); }); //Route::resource('enterprise', EnterpriseController::class)->middleware('auth'); try middleware('role:Create Clients'); Route::resource('budgetdata', BudgetdataController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('scores', ScoresController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('clients', ClientsController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('subscriptiontypes', SubscriptiontypesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('subscription-rates', SubscriptionRatesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('currencies', CurrenciesController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('clients', ClientsController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('bsreport', BSReportController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('transactioncategory', TransactioncategoryController::class)->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::get('sme-finance', [\App\Http\Controllers\SMEFinanceController::class, 'index'])->middleware('auth')->name('sme-finance.index'); Route::get('sme-finance/forms/product-information', [\App\Http\Controllers\SMEFinanceController::class, 'info'])->name('info'); Route::get('sme-finance/forms/product-information/accept', [\App\Http\Controllers\SMEFinanceController::class, 'info_accept'])->name('info.accept'); Route::get('sme-finance/forms/setup-costs', [\App\Http\Controllers\SMEFinanceController::class, 'setup_costs_show'])->middleware('auth')->name('sme-finance.setup-costs'); Route::get('sme-finance/forms/product-costs', [\App\Http\Controllers\SMEFinanceController::class, 'product_costs_show'])->middleware('auth')->name('sme-finance.product-costs'); Route::post('sme-finance/forms/setup-costs/store', [\App\Http\Controllers\SMEFinanceController::class, 'setup_costs_save'])->middleware('auth')->name('sme-finance.setup-costs.store'); Route::post('sme-finance/forms/product-costs/store', [\App\Http\Controllers\SMEFinanceController::class, 'product_costs_save'])->middleware('auth')->name('sme-finance.product-costs.store'); Route::get('sme-finance/reports/price-list', [\App\Http\Controllers\SMEFinanceController::class, 'price_list'])->middleware('auth')->name('sme-finance.price-list'); Route::get('sme-finance/reports/price-list/print', [\App\Http\Controllers\SMEFinanceController::class, 'price_list_report'])->middleware('auth')->name('sme-finance.price-list.print'); Route::get('sme-finance/reports/price-list-simple', [\App\Http\Controllers\SMEFinanceController::class, 'price_list_simple'])->middleware('auth')->name('sme-finance.price-list-simple'); Route::get('sme-finance/reports/price-list-simple/print', [\App\Http\Controllers\SMEFinanceController::class, 'price_list_simple_report'])->middleware('auth')->name('sme-finance.price-list-simple.print'); Route::middleware('auth')->group(function () { //budget Route::get('sme-finance/forms/units-budget', [\App\Http\Controllers\SMEFinanceController::class, 'units_budget'])->name('sme-finance.units-budget'); Route::post('sme-finance/forms/units-budget/store', [\App\Http\Controllers\SMEFinanceController::class, 'units_budget_save'])->name('sme-finance.units-budget.store'); Route::get('sme-finance/reports/cos-budget', [\App\Http\Controllers\SMEFinanceController::class, 'cos_budget'])->name('sme-finance.cos-budget'); Route::get('sme-finance/reports/sales-budget', [\App\Http\Controllers\SMEFinanceController::class, 'sales_budget'])->name('sme-finance.sales-budget'); Route::get('sme-finance/reports/cos-budget/print', [\App\Http\Controllers\SMEFinanceController::class, 'cos_budget_report'])->name('sme-finance.cos-budget.print'); Route::get('sme-finance/reports/sales-budget/print', [\App\Http\Controllers\SMEFinanceController::class, 'sales_budget_report'])->name('sme-finance.sales-budget.print'); //actual Route::get('sme-finance/forms/units-actual', [\App\Http\Controllers\SMEFinanceController::class, 'units_actual'])->name('sme-finance.units-actual'); Route::post('sme-finance/forms/units-actual/store', [\App\Http\Controllers\SMEFinanceController::class, 'units_actual_save'])->name('sme-finance.units-actual.store'); Route::get('sme-finance/reports/cos-actual', [\App\Http\Controllers\SMEFinanceController::class, 'cos_actual'])->name('sme-finance.cos-actual'); Route::get('sme-finance/reports/sales-actual', [\App\Http\Controllers\SMEFinanceController::class, 'sales_actual'])->name('sme-finance.sales-actual'); Route::get('sme-finance/reports/cos-actual/print', [\App\Http\Controllers\SMEFinanceController::class, 'cos_actual_report'])->name('sme-finance.cos-actual.print'); Route::get('sme-finance/reports/sales-actual/print', [\App\Http\Controllers\SMEFinanceController::class, 'sales_actual_report'])->name('sme-finance.sales-actual.print'); //budget vs actual Route::get('sme-finance/reports/budget-vs-actual-sales', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_sales'])->name('sme-finance.budget-vs-actual-sales'); Route::get('sme-finance/reports/budget-vs-actual-sales/print', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_sales_report'])->name('sme-finance.budget-vs-actual-sales.print'); Route::get('sme-finance/reports/budget-vs-actual-expenses', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_expenses'])->name('sme-finance.budget-vs-actual-expenses'); Route::get('sme-finance/reports/budget-vs-actual-expenses/print', [\App\Http\Controllers\SMEFinanceController::class, 'budget_vs_actual_expenses_report'])->name('sme-finance.budget-vs-actual-expenses.print'); //expenses Route::get('sme-finance/forms/expenses', [\App\Http\Controllers\SMEFinanceController::class, 'expenses_show'])->name('sme-finance.expenses'); Route::post('sme-finance/forms/expenses/store', [\App\Http\Controllers\SMEFinanceController::class, 'expenses_save'])->name('sme-finance.expenses.store'); Route::get('sme-finance/forms/expense-budget', [\App\Http\Controllers\SMEFinanceController::class, 'expense_budget'])->name('sme-finance.expense-budget'); Route::post('sme-finance/forms/expense-budget/store', [\App\Http\Controllers\SMEFinanceController::class, 'expense_budget_save'])->name('sme-finance.expense-budget.store'); Route::get('sme-finance/forms/expense-actual', [\App\Http\Controllers\SMEFinanceController::class, 'expense_actual'])->name('sme-finance.expense-actual')->name('sme-finance.expense-actual'); Route::post('sme-finance/forms/expense-actual/store', [\App\Http\Controllers\SMEFinanceController::class, 'expense_actual_save'])->name('sme-finance.expense-actual.store'); //other reports Route::get('sme-finance/reports/income-statement-summary', [\App\Http\Controllers\SMEFinanceController::class, 'income_summary'])->name('sme-finance.income-summary'); Route::get('sme-finance/reports/income-statement-summary/print', [\App\Http\Controllers\SMEFinanceController::class, 'income_summary_report'])->name('sme-finance.income-summary.print'); Route::get('sme-finance/reports/income-statement-detail', [\App\Http\Controllers\SMEFinanceController::class, 'income_detail'])->name('sme-finance.income-detail'); Route::get('sme-finance/reports/income-statement-detail/print', [\App\Http\Controllers\SMEFinanceController::class, 'income_detail_report'])->name('sme-finance.income-detail.print'); Route::get('sme-finance/reports/balance-sheet', [\App\Http\Controllers\SMEFinanceController::class, 'balance_sheet'])->name('sme-finance.balance-sheet'); Route::get('sme-finance/reports/balance-sheet/print', [\App\Http\Controllers\SMEFinanceController::class, 'balance_sheet_report'])->name('sme-finance.balance-sheet.print'); Route::get('sme-finance/reports/cash-flow', [\App\Http\Controllers\SMEFinanceController::class, 'cash_flow'])->name('sme-finance.cash-flow'); Route::get('sme-finance/reports/cash-flow/print', [\App\Http\Controllers\SMEFinanceController::class, 'cash_flow_report'])->name('sme-finance.cash-flow.print'); }); Route::post('manageme/managemebudget/{type}', [\App\Http\Controllers\ManageMeController::class, 'handleCategoryAction'])->middleware('auth'); Route::any('manageme/managemebudget', [\App\Http\Controllers\ManageMeController::class, 'manageMeBudget'])->middleware('auth'); Route::get('manageme', [\App\Http\Controllers\ManageMeController::class, 'index'])->middleware(\App\Http\Middleware\PermissionsMiddleware::class)->middleware('auth'); Route::post('smepersonrole/create/{id}/invite', [\App\Http\Controllers\Auth\InvitationController::class, 'inviteToEnterprise'])->name('enterprise.invite'); Route::get('/emailreports', [\App\Http\Controllers\EmailReportsController::class, 'index'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::post('/emailreports', [\App\Http\Controllers\EmailReportsController::class, 'sendReports'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::get('/notifications', [\App\Http\Controllers\EmailReportsController::class, 'handleNotifications'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); // Route::get('/share', [ShareController::class, 'generateShareableLink'])->name('generateShareableLink'); // Route::get('/links/revoke-access/{id}', [LinksController::class, 'revokeAccess'])->name('links.revoke-access'); // Route::resource('/links', LinksController::class); Route::get('/url-references', [UrlReferenceController::class, 'index'])->middleware([\App\Http\Middleware\AdminMiddleware::class, 'auth']); Route::resource('debtors', DebtorController::class); }); Route::post('invite/{id}', [\App\Http\Controllers\Auth\InvitationController::class, 'invite'])->name('invite'); Route::get('invite/{id}', [\App\Http\Controllers\Auth\InvitationController::class, 'showInviteForm'])->name('showInviteForm'); // (legacy unscoped auth routes removed 9 Aug 2026 - was matching every domain, superseded by Auth::routes() scoped inside the valyn.net domain groups) Route::get('/profitpilot/manageme', function () { return view('/profitpilot/manageme'); }); Route::get('/manageme-sme', function () { return view('profitpilot.manageme_sme'); })->name('manageme.sme'); Route::get('/manageme-accountant', function () { return view('profitpilot.manageme_accountant'); })->name('manageme.accountant'); Route::get('/manageme-financier', function () { return view('profitpilot.manageme_financier'); })->name('manageme.financier'); Route::get('/point-of-sale', function () { return view('profitpilot.transactP2P'); }); Route::get('/services', function () { return view('profitpilot.products'); })->name('profitpilot.products'); Route::get('/products', function () { return view('profitpilot.products-paid'); })->name('profitpilot.products.paid'); // --- Products admin (interim, same password gate as RedLed/BizWin uploads) --- Route::middleware([\App\Http\Middleware\ContentEditGate::class])->prefix('admin/products')->group(function () { Route::get('/', [\App\Http\Controllers\ProductsAdminController::class, 'index'])->name('admin.products.index'); Route::get('/create', [\App\Http\Controllers\ProductsAdminController::class, 'create'])->name('admin.products.create'); Route::post('/', [\App\Http\Controllers\ProductsAdminController::class, 'store'])->name('admin.products.store'); Route::get('/{id}/edit', [\App\Http\Controllers\ProductsAdminController::class, 'edit'])->name('admin.products.edit'); Route::put('/{id}', [\App\Http\Controllers\ProductsAdminController::class, 'update'])->name('admin.products.update'); Route::delete('/{id}', [\App\Http\Controllers\ProductsAdminController::class, 'destroy'])->name('admin.products.destroy'); });