From 8b4c9ea6ee492cf01d0e2b49aa7866b6ed074704 Mon Sep 17 00:00:00 2001 From: Kenneth Date: Sat, 25 Jan 2025 18:16:30 +0000 Subject: [PATCH] Initial commit from create-react-router --- .dockerignore | 4 ++ .gitignore | 6 +++ Dockerfile | 22 ++++++++ README.md | 100 +++++++++++++++++++++++++++++++++++++ app/app.css | 12 +++++ app/root.tsx | 76 ++++++++++++++++++++++++++++ app/routes.ts | 3 ++ app/routes/home.tsx | 13 +++++ app/welcome/logo-dark.svg | 23 +++++++++ app/welcome/logo-light.svg | 23 +++++++++ app/welcome/welcome.tsx | 89 +++++++++++++++++++++++++++++++++ bun.lockb | Bin 0 -> 143474 bytes package.json | 31 ++++++++++++ public/favicon.ico | Bin 0 -> 15086 bytes react-router.config.ts | 7 +++ tailwind.config.ts | 22 ++++++++ tsconfig.json | 27 ++++++++++ vite.config.ts | 14 ++++++ 18 files changed, 472 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 app/app.css create mode 100644 app/root.tsx create mode 100644 app/routes.ts create mode 100644 app/routes/home.tsx create mode 100644 app/welcome/logo-dark.svg create mode 100644 app/welcome/logo-light.svg create mode 100644 app/welcome/welcome.tsx create mode 100755 bun.lockb create mode 100644 package.json create mode 100644 public/favicon.ico create mode 100644 react-router.config.ts create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9b8d514 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +.react-router +build +node_modules +README.md \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b7c041 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.DS_Store +/node_modules/ + +# React Router +/.react-router/ +/build/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..207bf93 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM node:20-alpine AS development-dependencies-env +COPY . /app +WORKDIR /app +RUN npm ci + +FROM node:20-alpine AS production-dependencies-env +COPY ./package.json package-lock.json /app/ +WORKDIR /app +RUN npm ci --omit=dev + +FROM node:20-alpine AS build-env +COPY . /app/ +COPY --from=development-dependencies-env /app/node_modules /app/node_modules +WORKDIR /app +RUN npm run build + +FROM node:20-alpine +COPY ./package.json package-lock.json /app/ +COPY --from=production-dependencies-env /app/node_modules /app/node_modules +COPY --from=build-env /app/build /app/build +WORKDIR /app +CMD ["npm", "run", "start"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e0d2066 --- /dev/null +++ b/README.md @@ -0,0 +1,100 @@ +# Welcome to React Router! + +A modern, production-ready template for building full-stack React applications using React Router. + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/remix-run/react-router-templates/tree/main/default) + +## Features + +- 🚀 Server-side rendering +- ⚡️ Hot Module Replacement (HMR) +- 📦 Asset bundling and optimization +- 🔄 Data loading and mutations +- 🔒 TypeScript by default +- 🎉 TailwindCSS for styling +- 📖 [React Router docs](https://reactrouter.com/) + +## Getting Started + +### Installation + +Install the dependencies: + +```bash +npm install +``` + +### Development + +Start the development server with HMR: + +```bash +npm run dev +``` + +Your application will be available at `http://localhost:5173`. + +## Building for Production + +Create a production build: + +```bash +npm run build +``` + +## Deployment + +### Docker Deployment + +This template includes three Dockerfiles optimized for different package managers: + +- `Dockerfile` - for npm +- `Dockerfile.pnpm` - for pnpm +- `Dockerfile.bun` - for bun + +To build and run using Docker: + +```bash +# For npm +docker build -t my-app . + +# For pnpm +docker build -f Dockerfile.pnpm -t my-app . + +# For bun +docker build -f Dockerfile.bun -t my-app . + +# Run the container +docker run -p 3000:3000 my-app +``` + +The containerized application can be deployed to any platform that supports Docker, including: + +- AWS ECS +- Google Cloud Run +- Azure Container Apps +- Digital Ocean App Platform +- Fly.io +- Railway + +### DIY Deployment + +If you're familiar with deploying Node applications, the built-in app server is production-ready. + +Make sure to deploy the output of `npm run build` + +``` +├── package.json +├── package-lock.json (or pnpm-lock.yaml, or bun.lockb) +├── build/ +│ ├── client/ # Static assets +│ └── server/ # Server-side code +``` + +## Styling + +This template comes with [Tailwind CSS](https://tailwindcss.com/) already configured for a simple default starting experience. You can use whatever CSS framework you prefer. + +--- + +Built with ❤️ using React Router. diff --git a/app/app.css b/app/app.css new file mode 100644 index 0000000..303fe15 --- /dev/null +++ b/app/app.css @@ -0,0 +1,12 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +html, +body { + @apply bg-white dark:bg-gray-950; + + @media (prefers-color-scheme: dark) { + color-scheme: dark; + } +} diff --git a/app/root.tsx b/app/root.tsx new file mode 100644 index 0000000..742017a --- /dev/null +++ b/app/root.tsx @@ -0,0 +1,76 @@ +import { + isRouteErrorResponse, + Links, + Meta, + Outlet, + Scripts, + ScrollRestoration, +} from "react-router"; + +import type { Route } from "./+types/root"; +import stylesheet from "./app.css?url"; + +export const links: Route.LinksFunction = () => [ + { rel: "preconnect", href: "https://fonts.googleapis.com" }, + { + rel: "preconnect", + href: "https://fonts.gstatic.com", + crossOrigin: "anonymous", + }, + { + rel: "stylesheet", + href: "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap", + }, + { rel: "stylesheet", href: stylesheet }, +]; + +export function Layout({ children }: { children: React.ReactNode }) { + return ( + + + + + + + + + {children} + + + + + ); +} + +export default function App() { + return ; +} + +export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { + let message = "Oops!"; + let details = "An unexpected error occurred."; + let stack: string | undefined; + + if (isRouteErrorResponse(error)) { + message = error.status === 404 ? "404" : "Error"; + details = + error.status === 404 + ? "The requested page could not be found." + : error.statusText || details; + } else if (import.meta.env.DEV && error && error instanceof Error) { + details = error.message; + stack = error.stack; + } + + return ( +
+

{message}

+

{details}

+ {stack && ( +
+          {stack}
+        
+ )} +
+ ); +} diff --git a/app/routes.ts b/app/routes.ts new file mode 100644 index 0000000..102b402 --- /dev/null +++ b/app/routes.ts @@ -0,0 +1,3 @@ +import { type RouteConfig, index } from "@react-router/dev/routes"; + +export default [index("routes/home.tsx")] satisfies RouteConfig; diff --git a/app/routes/home.tsx b/app/routes/home.tsx new file mode 100644 index 0000000..398e47c --- /dev/null +++ b/app/routes/home.tsx @@ -0,0 +1,13 @@ +import type { Route } from "./+types/home"; +import { Welcome } from "../welcome/welcome"; + +export function meta({}: Route.MetaArgs) { + return [ + { title: "New React Router App" }, + { name: "description", content: "Welcome to React Router!" }, + ]; +} + +export default function Home() { + return ; +} diff --git a/app/welcome/logo-dark.svg b/app/welcome/logo-dark.svg new file mode 100644 index 0000000..dd82028 --- /dev/null +++ b/app/welcome/logo-dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/welcome/logo-light.svg b/app/welcome/logo-light.svg new file mode 100644 index 0000000..7328492 --- /dev/null +++ b/app/welcome/logo-light.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/welcome/welcome.tsx b/app/welcome/welcome.tsx new file mode 100644 index 0000000..8ac6e1d --- /dev/null +++ b/app/welcome/welcome.tsx @@ -0,0 +1,89 @@ +import logoDark from "./logo-dark.svg"; +import logoLight from "./logo-light.svg"; + +export function Welcome() { + return ( +
+
+
+
+ React Router + React Router +
+
+
+ +
+
+
+ ); +} + +const resources = [ + { + href: "https://reactrouter.com/docs", + text: "React Router Docs", + icon: ( + + + + ), + }, + { + href: "https://rmx.as/discord", + text: "Join Discord", + icon: ( + + + + ), + }, +]; diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..772c14a191cebd95da5a2634453735ecea8407d9 GIT binary patch literal 143474 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�iKC5H}!RKzxAs0SN#S1SAAV7?21c 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 SYHB3l;%N!-S<3$p|NB4iJUG4p literal 0 HcmV?d00001 diff --git a/package.json b/package.json new file mode 100644 index 0000000..778141f --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "track-my-app", + "private": true, + "type": "module", + "scripts": { + "build": "react-router build", + "dev": "react-router dev", + "start": "react-router-serve ./build/server/index.js", + "typecheck": "react-router typegen && tsc" + }, + "dependencies": { + "@react-router/node": "^7.1.3", + "@react-router/serve": "^7.1.3", + "isbot": "^5.1.17", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-router": "^7.1.3" + }, + "devDependencies": { + "@react-router/dev": "^7.1.3", + "@types/node": "^20", + "@types/react": "^19.0.1", + "@types/react-dom": "^19.0.1", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.16", + "typescript": "^5.7.2", + "vite": "^5.4.11", + "vite-tsconfig-paths": "^5.1.4" + } +} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5dbdfcddcb14182535f6d32d1c900681321b1aa3 GIT binary patch literal 15086 zcmeI33v3ic7{|AFEmuJ-;v>ep_G*NPi6KM`qNryCe1PIJ8siIN1WZ(7qVa)RVtmC% z)Ch?tN+afMKm;5@rvorJk zcXnoOc4q51HBQnQH_jn!cAg&XI1?PlX>Kl^k8qq0;zkha`kY$Fxt#=KNJAE9CMdpW zqr4#g8`nTw191(+H4xW8Tmyru2I^3=J1G3emPxkPXA=3{vvuvse_WWSshqaqls^-m zgB7q8&Vk*aYRe?sn$n53dGH#%3y%^vxv{pL*-h0Z4bmb_(k6{FL7HWIz(V*HT#IcS z-wE{)+0x1U!RUPt3gB97%p}@oHxF4|6S*+Yw=_tLtxZ~`S=z6J?O^AfU>7qOX`JNBbV&8+bO0%@fhQitKIJ^O^ zpgIa__qD_y07t@DFlBJ)8SP_#^j{6jpaXt{U%=dx!qu=4u7^21lWEYHPPY5U3TcoQ zX_7W+lvZi>TapNk_X>k-KO%MC9iZp>1E`N34gHKd9tK&){jq2~7OsJ>!G0FzxQFw6G zm&Vb(2#-T|rM|n3>uAsG_hnbvUKFf3#ay@u4uTzia~NY%XgCHfx4^To4BDU@)HlV? z@EN=g^ymETa1sQK{kRwyE4Ax8?wT&GvaG@ASO}{&a17&^v`y z!oPdiSiia^oov(Z)QhG2&|FgE{M9_4hJROGbnj>#$~ZF$-G^|zPj*QApltKe?;u;uKHJ~-V!=VLkg7Kgct)l7u39f@%VG8e3f$N-B zAu3a4%ZGf)r+jPAYCSLt73m_J3}p>}6Tx0j(wg4vvKhP!DzgiWANiE;Ppvp}P2W@m z-VbYn+NXFF?6ngef5CfY6ZwKnWvNV4z6s^~yMXw2i5mv}jC$6$46g?G|CPAu{W5qF zDobS=zb2ILX9D827g*NtGe5w;>frjanY{f)hrBP_2ehBt1?`~ypvg_Ot4x1V+43P@Ve8>qd)9NX_jWdLo`Zfy zoeam9)@Dpym{4m@+LNxXBPjPKA7{3a&H+~xQvr>C_A;7=JrfK~$M2pCh>|xLz>W6SCs4qC|#V`)# z)0C|?$o>jzh<|-cpf

K7osU{Xp5PG4-K+L2G=)c3f&}H&M3wo7TlO_UJjQ-Oq&_ zjAc9=nNIYz{c3zxOiS5UfcE1}8#iI4@uy;$Q7>}u`j+OU0N<*Ezx$k{x_27+{s2Eg z`^=rhtIzCm!_UcJ?Db~Lh-=_))PT3{Q0{Mwdq;0>ZL%l3+;B&4!&xm#%HYAK|;b456Iv&&f$VQHf` z>$*K9w8T+paVwc7fLfMlhQ4)*zL_SG{~v4QR;IuX-(oRtYAhWOlh`NLoX0k$RUYMi z2Y!bqpdN}wz8q`-%>&Le@q|jFw92ErW-hma-le?S z-@OZt2EEUm4wLsuEMkt4zlyy29_3S50JAcQHTtgTC{P~%-mvCTzrjXOc|{}N`Cz`W zSj7CrXfa7lcsU0J(0uSX6G`54t^7}+OLM0n(|g4waOQ}bd3%!XLh?NX9|8G_|06Ie zD5F1)w5I~!et7lA{G^;uf7aqT`KE&2qx9|~O;s6t!gb`+zVLJyT2T)l*8l(j literal 0 HcmV?d00001 diff --git a/react-router.config.ts b/react-router.config.ts new file mode 100644 index 0000000..6ff16f9 --- /dev/null +++ b/react-router.config.ts @@ -0,0 +1,7 @@ +import type { Config } from "@react-router/dev/config"; + +export default { + // Config options... + // Server-side render by default, to enable SPA mode set this to `false` + ssr: true, +} satisfies Config; diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..14d0f00 --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,22 @@ +import type { Config } from "tailwindcss"; + +export default { + content: ["./app/**/{**,.client,.server}/**/*.{js,jsx,ts,tsx}"], + theme: { + extend: { + fontFamily: { + sans: [ + '"Inter"', + "ui-sans-serif", + "system-ui", + "sans-serif", + '"Apple Color Emoji"', + '"Segoe UI Emoji"', + '"Segoe UI Symbol"', + '"Noto Color Emoji"', + ], + }, + }, + }, + plugins: [], +} satisfies Config; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..dc391a4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "include": [ + "**/*", + "**/.server/**/*", + "**/.client/**/*", + ".react-router/types/**/*" + ], + "compilerOptions": { + "lib": ["DOM", "DOM.Iterable", "ES2022"], + "types": ["node", "vite/client"], + "target": "ES2022", + "module": "ES2022", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "rootDirs": [".", "./.react-router/types"], + "baseUrl": ".", + "paths": { + "~/*": ["./app/*"] + }, + "esModuleInterop": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..66c718b --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,14 @@ +import { reactRouter } from "@react-router/dev/vite"; +import autoprefixer from "autoprefixer"; +import tailwindcss from "tailwindcss"; +import { defineConfig } from "vite"; +import tsconfigPaths from "vite-tsconfig-paths"; + +export default defineConfig({ + css: { + postcss: { + plugins: [tailwindcss, autoprefixer], + }, + }, + plugins: [reactRouter(), tsconfigPaths()], +});