This is an opiniated web3 frontend starter template from TreasureDAO.
- Remix
- Tailwind CSS
- GraphQL Codegen
- wagmi
- sonner (for toaster)
- Deployment on fly.io
- https://ui.shadcn.com/ for UI components using Radix UI and Tailwind CSS
npm run dev
Open up localhost:3000 and you should be ready to go!
If you are fetching data from an external GraphQL endpoint, first add your endpoint in .env
.
Write your query inside app.queries.ts
. Theres an example in there. When you're done, run npm run codegen
. Your autogenerated code will appear under the same file, /graphql
Then create a file called api.server.ts
under utils. Naming it with a server
prefix will tell Remix to not bundle that file in client JavaScript.
Something like this:
import { GraphQLClient } from "graphql-request";
import { getSdk } from "~/graphql/queries.generated";
// Passing URL here, since you'd want to have different endpoints depending on production or not
export const sdk = getSdk(
new GraphQLClient(process.env.API_URL as string)
);
Now you can use this in your loaders, where it will fetch from that endpoint and server side render your app.
ex.
import { sdk } from "~/utils.api.server";
export const loader: LoaderFunction = async () => {
return json<LoaderData>({
data: await sdk.hello(),
});
};
// then use it client like this:
export default function Index() {
const data = useLoaderData<typeof loader>();
return <div>{data.hello}</div>;
}
-
run
fly launch
and configure the repo for fly.io deployement -
npm run deploy