A better way of keeping track of your notes
7 |Try our early beta and never loose track of your notes again!
8 |9 | Try Now! 10 |
11 |├── .gitignore ├── Code ├── 02 Essentials │ ├── ZZ V2-finished │ │ ├── .gitignore │ │ ├── postcss.config.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ ├── logo-dark.png │ │ │ └── logo-light.png │ │ └── app │ │ │ └── tailwind.css │ ├── 02 Adding Links │ │ ├── .gitignore │ │ ├── app │ │ │ └── routes │ │ │ │ ├── demo.jsx │ │ │ │ └── index.jsx │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .eslintrc.js │ │ └── remix.config.js │ ├── 04 Styling Pages │ │ ├── .gitignore │ │ ├── app │ │ │ └── routes │ │ │ │ └── notes.jsx │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .eslintrc.js │ │ └── remix.config.js │ ├── 01 Starting Project │ │ ├── .gitignore │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .eslintrc.js │ │ ├── app │ │ │ └── routes │ │ │ │ └── index.jsx │ │ └── remix.config.js │ ├── 10 Validating Input │ │ ├── .gitignore │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .eslintrc.js │ │ └── remix.config.js │ ├── 06 Styling Active Links │ │ ├── .gitignore │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .eslintrc.js │ │ ├── remix.config.js │ │ └── app │ │ │ └── routes │ │ │ └── notes.jsx │ ├── 07 Adding Backend Code │ │ ├── .gitignore │ │ ├── notes.json │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .eslintrc.js │ │ └── remix.config.js │ ├── 09 Providing User Feedback │ │ ├── .gitignore │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .eslintrc.js │ │ └── remix.config.js │ ├── 12 Adding Dynamic Routes │ │ ├── .gitignore │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .eslintrc.js │ │ ├── notes.json │ │ └── remix.config.js │ ├── 03 Onwards to Better Project │ │ ├── .gitignore │ │ ├── app │ │ │ └── routes │ │ │ │ └── demo.jsx │ │ ├── .eslintrc.js │ │ ├── public │ │ │ └── favicon.ico │ │ └── remix.config.js │ ├── 05 Surfacing Component Styles │ │ ├── .gitignore │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .eslintrc.js │ │ ├── remix.config.js │ │ └── app │ │ │ └── routes │ │ │ └── notes.jsx │ ├── 11 Handling Error Responses │ │ ├── .gitignore │ │ ├── notes.json │ │ ├── .eslintrc.js │ │ ├── public │ │ │ └── favicon.ico │ │ └── remix.config.js │ ├── 08 Returning & Using Fetched Data │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── notes.json │ │ ├── public │ │ │ └── favicon.ico │ │ └── remix.config.js │ ├── 13 Fetching Data for Dynamic Routes │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ │ └── favicon.ico │ │ ├── notes.json │ │ └── remix.config.js │ ├── 14 Finished │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .eslintrc.js │ │ ├── remix.config.js │ │ └── notes.json │ └── Extra Files │ │ └── index.jsx ├── 06 Deployment │ ├── ZZ V2-finished │ │ ├── .gitignore │ │ ├── postcss.config.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ └── app │ │ │ ├── components │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ │ ├── tailwind.css │ │ │ └── routes │ │ │ ├── expenses.raw.jsx │ │ │ └── logout.js │ ├── 01 Starting Project │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ ├── expenses.raw.jsx │ │ │ │ └── logout.js │ │ └── remix.config.js │ ├── 02 Adding Metadata │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ ├── expenses.raw.jsx │ │ │ │ └── logout.js │ │ └── remix.config.js │ ├── 04 Disable JavaScript │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ ├── expenses.raw.jsx │ │ │ │ └── logout.js │ │ └── remix.config.js │ └── 03 Using Action & Loader Headers │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ │ ├── app │ │ ├── components │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── routes │ │ │ ├── expenses.raw.jsx │ │ │ └── logout.js │ │ └── remix.config.js ├── 04 Data Deep Dive │ ├── ZZ V2-finished │ │ ├── .gitignore │ │ ├── postcss.config.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ └── app │ │ │ ├── routes │ │ │ └── expenses.raw.jsx │ │ │ ├── components │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ │ └── tailwind.css │ ├── 15 Finished │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── routes │ │ │ │ └── expenses.raw.jsx │ │ │ └── components │ │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── remix.config.js │ ├── 09 Updating Data │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── FormattedDate.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── remix.config.js │ ├── 10 Deleting Data │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── FormattedDate.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── remix.config.js │ ├── 01 Starting Project │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── FormattedDate.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── remix.config.js │ ├── 06 Fetching Expenses │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── FormattedDate.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── remix.config.js │ ├── 02 Adding Expense Model │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── FormattedDate.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── remix.config.js │ ├── 04 Server-side Validation │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── FormattedDate.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── remix.config.js │ ├── 07 Loading a Single Expense │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── FormattedDate.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── remix.config.js │ ├── 08 Using Parent Loader Data │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── FormattedDate.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── remix.config.js │ ├── 14 Practice Time Solution │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ └── components │ │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── FormattedDate.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── remix.config.js │ ├── 12 Extracting Search Parameters │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── app │ │ │ └── components │ │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── FormattedDate.jsx │ │ │ │ └── Error.jsx │ │ └── remix.config.js │ ├── 03 Adding Expenses to the Database │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── FormattedDate.jsx │ │ │ │ │ └── Error.jsx │ │ │ └── routes │ │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── remix.config.js │ ├── 05 Submitting Forms Programmatically │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── FormattedDate.jsx │ │ │ │ │ └── Error.jsx │ │ │ └── routes │ │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── remix.config.js │ ├── 13 Managing Errors Inside Components │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── app │ │ │ └── components │ │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── FormattedDate.jsx │ │ │ │ └── Error.jsx │ │ └── remix.config.js │ └── 11 Programmatic Behind-the-Scenes Submission │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ │ ├── app │ │ ├── components │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ └── FormattedDate.jsx │ │ └── routes │ │ │ └── __marketing │ │ │ └── auth.jsx │ │ └── remix.config.js ├── 05 Authentication │ ├── ZZ V2-finished │ │ ├── .gitignore │ │ ├── postcss.config.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ └── app │ │ │ ├── components │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ │ ├── tailwind.css │ │ │ ├── routes │ │ │ ├── expenses.raw.jsx │ │ │ └── logout.js │ │ │ └── data │ │ │ └── database.server.js │ ├── 08 Finished │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── components │ │ │ │ └── util │ │ │ │ │ ├── Logo.jsx │ │ │ │ │ ├── Error.jsx │ │ │ │ │ └── Modal.jsx │ │ │ └── routes │ │ │ │ ├── expenses.raw.jsx │ │ │ │ └── logout.js │ │ └── remix.config.js │ ├── 03 User Signup │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── routes │ │ │ │ └── expenses.raw.jsx │ │ │ └── components │ │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── remix.config.js │ ├── 06 Adding Logout │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── routes │ │ │ │ ├── expenses.raw.js │ │ │ │ └── logout.js │ │ │ └── components │ │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── remix.config.js │ ├── 01 Starting Project │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── routes │ │ │ │ └── expenses.raw.jsx │ │ │ └── components │ │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── remix.config.js │ ├── 02 Preparing the Database │ │ ├── .gitignore │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── .eslintrc.js │ │ ├── app │ │ │ ├── routes │ │ │ │ └── expenses.raw.jsx │ │ │ └── components │ │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── remix.config.js │ ├── 04 Creating Session Cookies │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── app │ │ │ ├── routes │ │ │ │ └── expenses.raw.jsx │ │ │ └── components │ │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── remix.config.js │ ├── 05 Extracting Session Data │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ └── images │ │ │ │ ├── expenses-chart.jpg │ │ │ │ └── expenses-management.jpg │ │ ├── app │ │ │ ├── routes │ │ │ │ └── expenses.raw.jsx │ │ │ └── components │ │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── remix.config.js │ └── 07 More Route Protection │ │ ├── .gitignore │ │ ├── .eslintrc.js │ │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ │ ├── app │ │ ├── components │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── routes │ │ │ ├── expenses.raw.jsx │ │ │ └── logout.js │ │ └── remix.config.js └── 03 Routing Deep Dive │ ├── ZZ V2-finished │ ├── .gitignore │ ├── postcss.config.js │ ├── public │ │ ├── favicon.ico │ │ ├── logo-light.png │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ └── app │ │ ├── components │ │ └── util │ │ │ ├── Logo.jsx │ │ │ ├── FormattedDate.jsx │ │ │ ├── Error.jsx │ │ │ └── Modal.jsx │ │ ├── tailwind.css │ │ └── routes │ │ ├── $.jsx │ │ └── _marketing.auth.jsx │ ├── 07 Paths │ ├── .gitignore │ ├── app │ │ ├── routes │ │ │ ├── expenses.raw.jsx │ │ │ ├── auth.jsx │ │ │ └── expenses │ │ │ │ ├── add.jsx │ │ │ │ └── $id.jsx │ │ └── components │ │ │ └── util │ │ │ ├── Logo.jsx │ │ │ ├── Error.jsx │ │ │ └── Modal.jsx │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ ├── .eslintrc.js │ └── remix.config.js │ ├── 12 Finished │ ├── .gitignore │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ ├── .eslintrc.js │ ├── app │ │ ├── components │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── FormattedDate.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── routes │ │ │ ├── $.jsx │ │ │ └── __marketing │ │ │ └── auth.jsx │ └── remix.config.js │ ├── 01 Starting Project │ ├── .gitignore │ ├── public │ │ └── favicon.ico │ ├── .eslintrc.js │ ├── app │ │ └── routes │ │ │ └── index.jsx │ └── remix.config.js │ ├── 03 Layout Routes │ ├── .gitignore │ ├── app │ │ └── routes │ │ │ ├── auth.jsx │ │ │ ├── pricing.jsx │ │ │ ├── index.jsx │ │ │ ├── expenses.raw.jsx │ │ │ ├── expenses │ │ │ ├── add.jsx │ │ │ ├── analysis.jsx │ │ │ └── $id.jsx │ │ │ └── expenses.jsx │ ├── public │ │ └── favicon.ico │ ├── .eslintrc.js │ └── remix.config.js │ ├── 05 Marketing Pages │ ├── .gitignore │ ├── app │ │ ├── routes │ │ │ ├── expenses.raw.jsx │ │ │ ├── expenses │ │ │ │ ├── add.jsx │ │ │ │ └── $id.jsx │ │ │ └── auth.jsx │ │ └── components │ │ │ └── util │ │ │ ├── Logo.jsx │ │ │ ├── Error.jsx │ │ │ └── Modal.jsx │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ ├── .eslintrc.js │ └── remix.config.js │ ├── 11 Splat Routes │ ├── .gitignore │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ ├── .eslintrc.js │ ├── app │ │ ├── components │ │ │ └── util │ │ │ │ ├── Logo.jsx │ │ │ │ ├── FormattedDate.jsx │ │ │ │ ├── Error.jsx │ │ │ │ └── Modal.jsx │ │ └── routes │ │ │ ├── $.jsx │ │ │ └── __marketing │ │ │ └── auth.jsx │ └── remix.config.js │ ├── 02 Creating Project Routes │ ├── .gitignore │ ├── app │ │ └── routes │ │ │ ├── auth.jsx │ │ │ ├── index.jsx │ │ │ ├── pricing.jsx │ │ │ ├── expenses.jsx │ │ │ ├── expenses.add.jsx │ │ │ ├── expenses.raw.jsx │ │ │ ├── expenses.analysis.jsx │ │ │ └── expenses.$id.jsx │ ├── .eslintrc.js │ ├── public │ │ └── favicon.ico │ └── remix.config.js │ ├── 06 Rendering a Modal Page │ ├── .gitignore │ ├── app │ │ ├── routes │ │ │ ├── expenses.raw.jsx │ │ │ ├── auth.jsx │ │ │ └── expenses │ │ │ │ ├── add.jsx │ │ │ │ └── $id.jsx │ │ └── components │ │ │ └── util │ │ │ ├── Logo.jsx │ │ │ ├── Error.jsx │ │ │ └── Modal.jsx │ ├── .eslintrc.js │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ └── remix.config.js │ ├── 10 Doing More With Pathless │ ├── .gitignore │ ├── app │ │ ├── routes │ │ │ ├── expenses.raw.jsx │ │ │ └── __marketing │ │ │ │ └── auth.jsx │ │ └── components │ │ │ └── util │ │ │ ├── Logo.jsx │ │ │ ├── FormattedDate.jsx │ │ │ └── Error.jsx │ ├── .eslintrc.js │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ └── remix.config.js │ ├── 04 Adding Components & Styling │ ├── .gitignore │ ├── app │ │ ├── routes │ │ │ ├── pricing.jsx │ │ │ ├── index.jsx │ │ │ ├── expenses.raw.jsx │ │ │ ├── expenses │ │ │ │ ├── add.jsx │ │ │ │ ├── analysis.jsx │ │ │ │ └── $id.jsx │ │ │ └── auth.jsx │ │ └── components │ │ │ └── util │ │ │ ├── Logo.jsx │ │ │ ├── Error.jsx │ │ │ └── Modal.jsx │ ├── .eslintrc.js │ ├── public │ │ └── favicon.ico │ └── remix.config.js │ ├── 08 Navigating Programmatically │ ├── .gitignore │ ├── app │ │ ├── routes │ │ │ ├── expenses.raw.jsx │ │ │ └── auth.jsx │ │ └── components │ │ │ └── util │ │ │ ├── Logo.jsx │ │ │ ├── Error.jsx │ │ │ └── Modal.jsx │ ├── .eslintrc.js │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ └── remix.config.js │ ├── 09 Introducing Pathless Layout Routes │ ├── .gitignore │ ├── app │ │ ├── routes │ │ │ ├── expenses.raw.jsx │ │ │ ├── auth.jsx │ │ │ ├── __marketing.jsx │ │ │ └── __app.jsx │ │ └── components │ │ │ └── util │ │ │ └── Logo.jsx │ ├── .eslintrc.js │ ├── public │ │ ├── favicon.ico │ │ └── images │ │ │ ├── expenses-chart.jpg │ │ │ └── expenses-management.jpg │ └── remix.config.js │ └── Extra Files │ ├── images.zip │ ├── styles.zip │ ├── components.zip │ ├── images │ ├── expenses-chart.jpg │ └── expenses-management.jpg │ └── components │ └── util │ ├── Logo.jsx │ ├── Error.jsx │ └── Modal.jsx ├── .prettierrc └── Slides └── remix-slides.pdf /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | -------------------------------------------------------------------------------- /Code/02 Essentials/ZZ V2-finished/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | .env 6 | -------------------------------------------------------------------------------- /Code/06 Deployment/ZZ V2-finished/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | .env 6 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "jsxSingleQuote": true, 4 | "singleQuote": true 5 | } 6 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/ZZ V2-finished/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | .env 6 | -------------------------------------------------------------------------------- /Code/05 Authentication/ZZ V2-finished/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | .env 6 | -------------------------------------------------------------------------------- /Code/03 Routing Deep Dive/ZZ V2-finished/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | .env 6 | -------------------------------------------------------------------------------- /Code/02 Essentials/02 Adding Links/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/02 Essentials/04 Styling Pages/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/03 Routing Deep Dive/07 Paths/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/15 Finished/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/05 Authentication/08 Finished/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/02 Essentials/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/02 Essentials/10 Validating Input/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/03 Routing Deep Dive/12 Finished/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/09 Updating Data/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/10 Deleting Data/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/05 Authentication/03 User Signup/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/05 Authentication/06 Adding Logout/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/06 Deployment/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/02 Essentials/06 Styling Active Links/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/02 Essentials/07 Adding Backend Code/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/02 Essentials/09 Providing User Feedback/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/02 Essentials/12 Adding Dynamic Routes/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/03 Routing Deep Dive/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/03 Routing Deep Dive/03 Layout Routes/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/03 Routing Deep Dive/05 Marketing Pages/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/03 Routing Deep Dive/11 Splat Routes/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/06 Fetching Expenses/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/05 Authentication/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/02 Essentials/03 Onwards to Better Project/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/02 Essentials/05 Surfacing Component Styles/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/02 Essentials/07 Adding Backend Code/notes.json: -------------------------------------------------------------------------------- 1 | {"notes":[{"title":"Test","content":"Test","id":"2022-10-19T09:23:11.183Z"}]} -------------------------------------------------------------------------------- /Code/02 Essentials/11 Handling Error Responses/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/02 Adding Expense Model/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/04 Server-side Validation/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/07 Loading a Single Expense/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/08 Using Parent Loader Data/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/04 Data Deep Dive/14 Practice Time Solution/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/05 Authentication/02 Preparing the Database/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/05 Authentication/04 Creating Session Cookies/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/05 Authentication/05 Extracting Session Data/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/05 Authentication/07 More Route Protection/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /Code/06 Deployment/02 Adding Metadata/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | .DS_Store -------------------------------------------------------------------------------- /Code/06 Deployment/04 Disable JavaScript/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | .DS_Store -------------------------------------------------------------------------------- /Slides/remix-slides.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/remix-practical-guide-course-resources/HEAD/Slides/remix-slides.pdf -------------------------------------------------------------------------------- /Code/02 Essentials/02 Adding Links/app/routes/demo.jsx: -------------------------------------------------------------------------------- 1 | export default function DemoPage() { 2 | return
Shared element!
9 |Try our early beta and never loose track of your notes again!
8 |9 | Try Now! 10 |
11 |