| 1 | import type { Metadata } from "next"; |
| 2 | import Link from "next/link"; |
| 3 | |
| 4 | export const metadata: Metadata = { |
| 5 | title: "Docket - The public record of the U.S. government", |
| 6 | description: |
| 7 | "Docket is a neutral, sourced record of official federal government activity: bills, votes, spending, and more. Every fact links to its official .gov source.", |
| 8 | }; |
| 9 | |
| 10 | export const revalidate = 3600; |
| 11 | |
| 12 | const SECTIONS = [ |
| 13 | { |
| 14 | href: "/bills", |
| 15 | kicker: "Legislation", |
| 16 | title: "Bills", |
| 17 | desc: "Laws and legislation in progress. Status, sponsor, what changed between versions, and the official record.", |
| 18 | }, |
| 19 | { |
| 20 | href: "/votes", |
| 21 | kicker: "Roll Calls", |
| 22 | title: "Votes", |
| 23 | desc: "House and Senate roll-call votes. See how every member voted, by name.", |
| 24 | }, |
| 25 | { |
| 26 | href: "/laws", |
| 27 | kicker: "Enacted", |
| 28 | title: "Laws", |
| 29 | desc: "Bills that have become law. Each Public Law links to the bill it came from and the official record.", |
| 30 | }, |
| 31 | { |
| 32 | href: "/members", |
| 33 | kicker: "Congress", |
| 34 | title: "Representatives", |
| 35 | desc: "Every member of Congress. Party, state, vote record, and bills sponsored.", |
| 36 | }, |
| 37 | { |
| 38 | href: "/spending", |
| 39 | kicker: "Fiscal", |
| 40 | title: "Spending", |
| 41 | desc: "Federal awards and contracts from USAspending.gov. Where the dollars go.", |
| 42 | }, |
| 43 | { |
| 44 | href: "/states", |
| 45 | kicker: "Regional", |
| 46 | title: "States", |
| 47 | desc: "Bills, members, and federal activity organized by your state.", |
| 48 | }, |
| 49 | { |
| 50 | href: "/register", |
| 51 | kicker: "Live Feed", |
| 52 | title: "What's happening", |
| 53 | desc: "A chronological feed of government actions: bills passed, votes taken, dollars awarded. No editorial weighting.", |
| 54 | }, |
| 55 | ] as const; |
| 56 | |
| 57 | const MORE_LINKS = [ |
| 58 | { href: "/calendar", label: "Calendar" }, |
| 59 | { href: "/schedule", label: "Schedule" }, |
| 60 | { href: "/executive", label: "Executive orders" }, |
| 61 | { href: "/categories", label: "Browse by topic" }, |
| 62 | { href: "/search", label: "Search everything" }, |
| 63 | ] as const; |
| 64 | |
| 65 | export default function HomePage() { |
| 66 | return ( |
| 67 | <div |
| 68 | style={{ |
| 69 | background: "var(--dk-hero-glow)", |
| 70 | }} |
| 71 | > |
| 72 | {} |
| 73 | <section |
| 74 | aria-label="Introduction" |
| 75 | style={{ |
| 76 | maxWidth: "860px", |
| 77 | margin: "0 auto", |
| 78 | padding: "clamp(56px, 10vw, 120px) 24px clamp(48px, 8vw, 96px)", |
| 79 | }} |
| 80 | > |
| 81 | {} |
| 82 | <p |
| 83 | className="label" |
| 84 | style={{ |
| 85 | color: "var(--dk-signal)", |
| 86 | marginBottom: "28px", |
| 87 | display: "flex", |
| 88 | alignItems: "center", |
| 89 | gap: "10px", |
| 90 | }} |
| 91 | > |
| 92 | <span |
| 93 | aria-hidden="true" |
| 94 | style={{ |
| 95 | width: "6px", |
| 96 | height: "6px", |
| 97 | borderRadius: "50%", |
| 98 | background: "var(--dk-signal)", |
| 99 | boxShadow: "0 0 0 3px rgba(224,165,59,0.18)", |
| 100 | display: "inline-block", |
| 101 | flexShrink: 0, |
| 102 | }} |
| 103 | /> |
| 104 | Docket · Federal Record |
| 105 | </p> |
| 106 | |
| 107 | {} |
| 108 | <h1 |
| 109 | className="font-display text-paper" |
| 110 | style={{ |
| 111 | fontSize: "clamp(2.8rem, 9vw, 5.5rem)", |
| 112 | fontWeight: 900, |
| 113 | lineHeight: 1.0, |
| 114 | letterSpacing: "-0.01em", |
| 115 | wordSpacing: "0.06em", |
| 116 | textTransform: "uppercase", |
| 117 | maxWidth: "16ch", |
| 118 | marginBottom: "32px", |
| 119 | }} |
| 120 | > |
| 121 | The Public Record of the U.S. Government |
| 122 | </h1> |
| 123 | |
| 124 | {} |
| 125 | <p |
| 126 | className="font-prose" |
| 127 | style={{ |
| 128 | fontStyle: "italic", |
| 129 | fontSize: "clamp(1.0625rem, 2vw, 1.25rem)", |
| 130 | lineHeight: 1.55, |
| 131 | color: "var(--dk-ash)", |
| 132 | maxWidth: "48ch", |
| 133 | marginBottom: "40px", |
| 134 | }} |
| 135 | > |
| 136 | Bills, votes, and dollars straight from official government sources. |
| 137 | No spin. No opinion. Every fact links to its{" "} |
| 138 | <span style={{ whiteSpace: "nowrap" }}> |
| 139 | official{" "} |
| 140 | <span className="font-mono not-italic" style={{ fontSize: "0.9em" }}> |
| 141 | .gov |
| 142 | </span> |
| 143 | </span>{" "} |
| 144 | source. |
| 145 | </p> |
| 146 | |
| 147 | {} |
| 148 | <div style={{ display: "flex", flexWrap: "wrap", gap: "12px" }}> |
| 149 | <Link |
| 150 | href="/search" |
| 151 | className="focus-ring no-underline" |
| 152 | style={{ |
| 153 | display: "inline-flex", |
| 154 | alignItems: "center", |
| 155 | gap: "9px", |
| 156 | height: "48px", |
| 157 | padding: "0 22px", |
| 158 | background: "var(--dk-signal)", |
| 159 | color: "var(--dk-ink)", |
| 160 | fontFamily: "var(--font-mono), ui-monospace, monospace", |
| 161 | fontSize: "12.5px", |
| 162 | fontWeight: 700, |
| 163 | letterSpacing: "0.1em", |
| 164 | textTransform: "uppercase", |
| 165 | borderRadius: "9px", |
| 166 | border: "1px solid transparent", |
| 167 | transition: "background 0.2s, transform 0.15s", |
| 168 | boxShadow: "0 8px 22px -8px rgba(224,165,59,0.45)", |
| 169 | }} |
| 170 | > |
| 171 | <SearchIcon /> |
| 172 | Search everything |
| 173 | </Link> |
| 174 | |
| 175 | <Link |
| 176 | href="/bills" |
| 177 | className="focus-ring no-underline" |
| 178 | style={{ |
| 179 | display: "inline-flex", |
| 180 | alignItems: "center", |
| 181 | height: "48px", |
| 182 | padding: "0 22px", |
| 183 | background: "transparent", |
| 184 | color: "var(--dk-paper)", |
| 185 | fontFamily: "var(--font-mono), ui-monospace, monospace", |
| 186 | fontSize: "12.5px", |
| 187 | fontWeight: 400, |
| 188 | letterSpacing: "0.1em", |
| 189 | textTransform: "uppercase", |
| 190 | borderRadius: "9px", |
| 191 | border: "1px solid var(--dk-line)", |
| 192 | transition: "border-color 0.2s, background 0.2s", |
| 193 | }} |
| 194 | > |
| 195 | Browse bills |
| 196 | </Link> |
| 197 | </div> |
| 198 | </section> |
| 199 | |
| 200 | {} |
| 201 | <section |
| 202 | aria-label="Browse sections" |
| 203 | style={{ |
| 204 | maxWidth: "860px", |
| 205 | margin: "0 auto", |
| 206 | padding: "0 24px clamp(40px, 8vw, 80px)", |
| 207 | }} |
| 208 | > |
| 209 | {} |
| 210 | <p |
| 211 | className="label" |
| 212 | style={{ color: "var(--dk-ash)", marginBottom: "28px" }} |
| 213 | > |
| 214 | What you can do here |
| 215 | </p> |
| 216 | |
| 217 | <div |
| 218 | style={{ |
| 219 | display: "grid", |
| 220 | gridTemplateColumns: "repeat(auto-fill, minmax(280px, 1fr))", |
| 221 | gap: "16px", |
| 222 | }} |
| 223 | > |
| 224 | {SECTIONS.map((s) => ( |
| 225 | <Link |
| 226 | key={s.href} |
| 227 | href={s.href} |
| 228 | className="focus-ring no-underline" |
| 229 | style={{ |
| 230 | display: "block", |
| 231 | border: "1px solid var(--dk-line)", |
| 232 | borderRadius: "10px", |
| 233 | background: "var(--dk-surface)", |
| 234 | padding: "28px 24px", |
| 235 | transition: "border-color 0.2s, background 0.2s", |
| 236 | }} |
| 237 | > |
| 238 | {} |
| 239 | <p |
| 240 | className="label" |
| 241 | style={{ color: "var(--dk-signal)", marginBottom: "10px", fontSize: "12px", letterSpacing: "0.14em" }} |
| 242 | > |
| 243 | {s.kicker} |
| 244 | </p> |
| 245 | {} |
| 246 | <p |
| 247 | className="font-display text-paper" |
| 248 | style={{ |
| 249 | fontSize: "1.375rem", |
| 250 | fontWeight: 800, |
| 251 | letterSpacing: "-0.02em", |
| 252 | textTransform: "uppercase", |
| 253 | lineHeight: 1.05, |
| 254 | marginBottom: "12px", |
| 255 | }} |
| 256 | > |
| 257 | {s.title} |
| 258 | </p> |
| 259 | {} |
| 260 | <p |
| 261 | className="font-prose" |
| 262 | style={{ |
| 263 | fontSize: "1rem", |
| 264 | lineHeight: 1.55, |
| 265 | color: "var(--dk-ash)", |
| 266 | }} |
| 267 | > |
| 268 | {s.desc} |
| 269 | </p> |
| 270 | </Link> |
| 271 | ))} |
| 272 | </div> |
| 273 | </section> |
| 274 | |
| 275 | {} |
| 276 | <section |
| 277 | aria-label="More sections" |
| 278 | style={{ |
| 279 | maxWidth: "860px", |
| 280 | margin: "0 auto", |
| 281 | padding: "0 24px clamp(32px, 6vw, 56px)", |
| 282 | borderTop: "1px solid var(--dk-line)", |
| 283 | }} |
| 284 | > |
| 285 | <p |
| 286 | className="label" |
| 287 | style={{ color: "var(--dk-ash-2)", marginBottom: "20px", marginTop: "32px" }} |
| 288 | > |
| 289 | More |
| 290 | </p> |
| 291 | <ul |
| 292 | style={{ display: "flex", flexWrap: "wrap", gap: "10px", listStyle: "none", padding: 0, margin: 0 }} |
| 293 | > |
| 294 | {MORE_LINKS.map((l) => ( |
| 295 | <li key={l.href}> |
| 296 | <Link |
| 297 | href={l.href} |
| 298 | className="focus-ring no-underline" |
| 299 | style={{ |
| 300 | display: "inline-flex", |
| 301 | alignItems: "center", |
| 302 | minHeight: "44px", |
| 303 | padding: "0 16px", |
| 304 | border: "1px solid var(--dk-line)", |
| 305 | borderRadius: "8px", |
| 306 | background: "var(--dk-surface)", |
| 307 | fontFamily: "var(--font-mono), ui-monospace, monospace", |
| 308 | fontSize: "12px", |
| 309 | letterSpacing: "0.1em", |
| 310 | textTransform: "uppercase", |
| 311 | color: "var(--dk-ash)", |
| 312 | transition: "border-color 0.2s, color 0.2s", |
| 313 | }} |
| 314 | > |
| 315 | {l.label} |
| 316 | </Link> |
| 317 | </li> |
| 318 | ))} |
| 319 | </ul> |
| 320 | </section> |
| 321 | |
| 322 | {} |
| 323 | <section |
| 324 | aria-label="How to cite this site" |
| 325 | style={{ |
| 326 | maxWidth: "860px", |
| 327 | margin: "0 auto", |
| 328 | padding: "0 24px clamp(24px, 5vw, 40px)", |
| 329 | }} |
| 330 | > |
| 331 | <div |
| 332 | style={{ |
| 333 | border: "1px solid var(--dk-line)", |
| 334 | borderRadius: "10px", |
| 335 | background: "var(--dk-surface)", |
| 336 | padding: "clamp(24px, 4vw, 40px)", |
| 337 | }} |
| 338 | > |
| 339 | {} |
| 340 | <p className="label" style={{ color: "var(--dk-signal)", marginBottom: "20px", fontSize: "12px", letterSpacing: "0.14em" }}> |
| 341 | Citations |
| 342 | </p> |
| 343 | |
| 344 | <h2 |
| 345 | className="font-display text-paper" |
| 346 | style={{ |
| 347 | fontSize: "clamp(1.5rem, 3.5vw, 2rem)", |
| 348 | fontWeight: 900, |
| 349 | letterSpacing: "-0.02em", |
| 350 | textTransform: "uppercase", |
| 351 | lineHeight: 1.0, |
| 352 | marginBottom: "20px", |
| 353 | }} |
| 354 | > |
| 355 | How to cite this site |
| 356 | </h2> |
| 357 | |
| 358 | <p |
| 359 | className="font-prose" |
| 360 | style={{ |
| 361 | fontSize: "1.0625rem", |
| 362 | lineHeight: 1.6, |
| 363 | color: "var(--dk-ash)", |
| 364 | maxWidth: "56ch", |
| 365 | }} |
| 366 | > |
| 367 | On any bill, vote, or member page, scroll to the bottom and use the{" "} |
| 368 | <strong style={{ color: "var(--dk-paper)" }}>Cite this record</strong>{" "} |
| 369 | panel. It fills in the author, date, title, permalink, and the official |
| 370 | government source automatically - in APA, MLA, or Chicago format. |
| 371 | </p> |
| 372 | |
| 373 | <div |
| 374 | style={{ |
| 375 | marginTop: "24px", |
| 376 | borderTop: "1px solid var(--dk-line)", |
| 377 | paddingTop: "20px", |
| 378 | fontFamily: "var(--font-mono), ui-monospace, monospace", |
| 379 | fontSize: "13px", |
| 380 | color: "var(--dk-ash)", |
| 381 | fontStyle: "italic", |
| 382 | }} |
| 383 | > |
| 384 | <span style={{ color: "var(--dk-ash-2)", fontStyle: "normal", fontSize: "12px", letterSpacing: "0.08em", textTransform: "uppercase" }}>Example APA · </span> |
| 385 | <span style={{ fontStyle: "normal" }}> |
| 386 | Docket. (2025). H.R. 22 - [Title]. usdocket.org. Retrieved from https://congress.gov/... |
| 387 | </span> |
| 388 | </div> |
| 389 | </div> |
| 390 | </section> |
| 391 | |
| 392 | {} |
| 393 | <section |
| 394 | aria-label="About this site" |
| 395 | style={{ |
| 396 | maxWidth: "860px", |
| 397 | margin: "0 auto", |
| 398 | padding: "clamp(16px, 3vw, 24px) 24px clamp(56px, 10vw, 96px)", |
| 399 | }} |
| 400 | > |
| 401 | <div |
| 402 | style={{ |
| 403 | border: "1px solid var(--dk-line)", |
| 404 | borderRadius: "10px", |
| 405 | background: "var(--dk-surface)", |
| 406 | padding: "clamp(24px, 4vw, 36px)", |
| 407 | }} |
| 408 | > |
| 409 | <p className="label" style={{ color: "var(--dk-ash-2)", marginBottom: "16px", fontSize: "12px", letterSpacing: "0.14em" }}> |
| 410 | About this site |
| 411 | </p> |
| 412 | <p |
| 413 | className="font-prose" |
| 414 | style={{ |
| 415 | fontSize: "1rem", |
| 416 | lineHeight: 1.6, |
| 417 | color: "var(--dk-ash)", |
| 418 | maxWidth: "62ch", |
| 419 | }} |
| 420 | > |
| 421 | Docket is neutral by design. It does not editorialize, rank by political |
| 422 | popularity, or surface opinion. The feed is ordered by action date and |
| 423 | dollar magnitude only - the same factors as the official record. Party |
| 424 | colors appear only in desaturated, equal-weight tones. No comment |
| 425 | section. No ads. All source links open the official .gov record directly. |
| 426 | </p> |
| 427 | <div |
| 428 | style={{ |
| 429 | marginTop: "20px", |
| 430 | display: "flex", |
| 431 | flexWrap: "wrap", |
| 432 | gap: "20px", |
| 433 | }} |
| 434 | > |
| 435 | <Link |
| 436 | href="/how-we-pick" |
| 437 | className="focus-ring label underline underline-offset-4" |
| 438 | style={{ color: "var(--dk-signal)", fontSize: "12px", letterSpacing: "0.1em" }} |
| 439 | > |
| 440 | How we pick what to show |
| 441 | </Link> |
| 442 | <Link |
| 443 | href="/who-pays" |
| 444 | className="focus-ring label underline underline-offset-4" |
| 445 | style={{ color: "var(--dk-signal)", fontSize: "12px", letterSpacing: "0.1em" }} |
| 446 | > |
| 447 | Who pays for this |
| 448 | </Link> |
| 449 | </div> |
| 450 | </div> |
| 451 | </section> |
| 452 | </div> |
| 453 | ); |
| 454 | } |
| 455 | |
| 456 | function SearchIcon() { |
| 457 | return ( |
| 458 | <svg |
| 459 | aria-hidden="true" |
| 460 | width="16" |
| 461 | height="16" |
| 462 | viewBox="0 0 16 16" |
| 463 | fill="none" |
| 464 | stroke="currentColor" |
| 465 | strokeWidth="1.75" |
| 466 | strokeLinecap="round" |
| 467 | strokeLinejoin="round" |
| 468 | style={{ flexShrink: 0 }} |
| 469 | > |
| 470 | <circle cx="6.5" cy="6.5" r="4.5" /> |
| 471 | <line x1="10.5" y1="10.5" x2="14" y2="14" /> |
| 472 | </svg> |
| 473 | ); |
| 474 | } |