This repository (and README) is based on Remix's Indie Stack template. It has been modified to be easily deployable to Render.
- Render app deployment with a Node.js Native Environment
- Production-ready, Render-managed PostgreSQL database
- Healthcheck endpoint for zero downtime deploys
- Email/Password Authentication with cookie-based sessions
- Database ORM with Prisma
- Styling with Tailwind
- End-to-end testing with Cypress
- Local third party request mocking with MSW
- Unit testing with Vitest and Testing Library
- Code formatting with Prettier
- Linting with ESLint
- Static Types with TypeScript
-
Initial setup: If you just generated this project, this step has been done for you.
npm run setup
-
Start dev server:
npm run dev
This starts your app in development mode, rebuilding assets on file changes.
The database seed script creates a new user with some data you can use to get started:
- Email:
rachel@remix.run
- Password:
racheliscool
This is a pretty simple note-taking app, but it's a good example of how you can build a full stack app with Prisma and Remix. The main functionality is creating users, logging in and out, and creating and deleting notes.
- creating users, and logging in and out ./app/models/user.server.ts
- user sessions, and verifying them ./app/session.server.ts
- creating, and deleting notes ./app/models/note.server.ts
It's free to deploy this example to Render, including a managed PostgreSQL database.
- Click the Use this template to create a copy of this repository in your GitHub account.
- In the Render Dashboard, click New --> Blueprint and select your copy of this repository. You may need to connect your GitHub account to Render if you haven't already done so.
- Give your Service Group a name and click Apply.
- When the database and service have been created, open your service's
.onrender.com
URL in a browser to see your Remix app.
See the Render Remix Quickstart page for more details.
A PostgreSQL database (free for 90 days) is created automatically when you deploy the render.yaml
at the root of this repository as a Blueprint. Using psql
, you can connect to it using the web shell of your Remix service or SSH directly from your development machine.
This project uses Cypress for our End-to-End tests in this project. You'll find those in the cypress
directory. As you make changes, add to an existing file or create a new file in the cypress/e2e
directory to test your changes.
The project uses @testing-library/cypress
for selecting elements on the page semantically.
To run these tests in development, run npm run test:e2e:dev
which will start the dev server for the app as well as the Cypress client. Make sure the database is running in docker as described above.
There is a utility for testing authenticated features without having to go through the login flow:
cy.login();
// you are now logged in as a new user
The project also has a utility to auto-delete the user at the end of your test. Just make sure to add this in each test file:
afterEach(() => {
cy.cleanupUser();
});
That way, you can keep your local db clean and keep your tests isolated from one another.
For lower level tests of utilities and individual components, the project uses vitest
. There are DOM-specific assertion helpers via @testing-library/jest-dom
.
This project uses TypeScript. It's recommended to get TypeScript set up for your editor to get a really great in-editor experience with type checking and auto-complete. To run type checking across the whole project, run npm run typecheck
.
This project uses ESLint for linting. That is configured in .eslintrc.js
.
The project uses Prettier for auto-formatting in this project. It's recommended to install an editor plugin (like the VSCode Prettier plugin) to get auto-formatting on save. There's also a npm run format
script you can run to format all files in the project.
- Remix team for creating an innovative new project and for creating this repository's foundation with their Indie Stacks.
- TerribleDev for the inspiration and idea for this Render Quickstart repository.