style(quotes): tighter tab gap; header buttons always inline + dev: whitelist 192.168.1.42

quotes/page.tsx
- Reduce inter-tab gap from gap-1 (4px) to gap-0.5 (2px) so the
  pill strip reads as one cohesive filter row instead of a row of
  loose badges.
- Drop `flex flex-col sm:flex-row items-start sm:items-center` on
  the page header in favour of `flex flex-row flex-wrap
  items-center`. On mobile widths (375px tested), the Approvals
  and "+" buttons now stay inline with the "Quotes" title instead
  of dropping below it.

next.config.ts
- Add 192.168.1.42 to allowedDevOrigins. The dev server was
  warning when the user hit the app from a LAN host (their iPad,
  visible in ps as `192.168.1.42:newoak->ipad.home:55199`). Now
  whitelisted explicitly alongside the existing 192.168.1.122 /
  192.168.1.128 entries.
This commit is contained in:
SJCoetz 2026-07-26 23:56:23 +02:00
parent 6d63da70d0
commit e626292b04
2 changed files with 14 additions and 14 deletions

View file

@ -1,12 +1,12 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
output: "standalone",
// Dev server blocks cross-origin HMR requests by default in Next 16. The
// app is normally loaded on `localhost`, but we also load it on
// `127.0.0.1` (and on the LAN IP for phone testing). Listing both keeps
// the HMR client from hanging on the first load.
allowedDevOrigins: ["127.0.0.1", "localhost", "192.168.1.122", "192.168.1.128", "*"],
};
export default nextConfig;
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
output: "standalone",
// Dev server blocks cross-origin HMR requests by default in Next 16. The
// app is normally loaded on `localhost`, but we also load it on
// `127.0.0.1` (and on the LAN IP for phone testing). Listing both keeps
// the HMR client from hanging on the first load.
allowedDevOrigins: ["127.0.0.1", "localhost", "192.168.1.42", "192.168.1.122", "192.168.1.128", "*"],
};
export default nextConfig;

View file

@ -346,7 +346,7 @@ export default function QuotesPage() {
return (
<div className="space-y-6">
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3">
<div className="flex flex-row flex-wrap items-center justify-between gap-3">
<div>
<h1 className="text-2xl font-bold tracking-tight">Quotes</h1>
<p className="text-muted-foreground text-sm sm:text-base">Manage quote requests</p>
@ -364,7 +364,7 @@ export default function QuotesPage() {
</div>
<Tabs value={activeTab} onValueChange={(v) => { setActiveTab(v); setPage(1); }}>
<TabsList className="flex flex-wrap h-auto min-h-fit w-full items-start justify-start gap-1 bg-transparent p-0 pb-4">
<TabsList className="flex flex-wrap h-auto min-h-fit w-full items-start justify-start gap-0.5 bg-transparent p-0 pb-4">
{TAB_ORDER.map((tab) => (
<TabsTrigger
key={tab.key}