Zach Silveira was kind enough to create a video tutorial:
https://www.youtube.com/watch?v=apZwd0FqQu4&feature=youtu.be
Here are my notes as I followed along...
- Install Docker for Mac.
| import { Resource, type Context } from "alchemy"; | |
| import { CloudflareApi, createCloudflareApi } from "alchemy/cloudflare"; | |
| const DEFAULT_BUILD_COMMAND = ""; | |
| const DEFAULT_PREVIEW_DEPLOY_COMMAND = "npx wrangler versions upload"; | |
| const DEFAULT_PRODUCTION_DEPLOY_COMMAND = "npx wrangler deploy"; | |
| const DEFAULT_ROOT_DIRECTORY = "/"; | |
| interface JsonResponse<T> { | |
| success: boolean; |
| // https://alchemy.run/concepts/resource/ | |
| import alchemy, { Resource, type Context } from "alchemy"; | |
| import { | |
| CloudflareApi, | |
| createCloudflareApi, | |
| type AiGatewayResource, | |
| type R2BucketResource, | |
| } from "alchemy/cloudflare"; |
| { | |
| "meta": { "theme": "even" }, | |
| "basics": { | |
| "name": "Eric Clemmons", | |
| "label": "Open-source author and technical leader", | |
| "email": "eric@clemmons.family", | |
| "phone": "(832) 414-7673", | |
| "url": "https://ericclemmons.com", | |
| "summary": "Open-source author and technical leader specializing in full-stack applications with ergonomic APIs. 17+ years of experience scaling engineering teams and delivering high-impact solutions that drive measurable business outcomes. Expert in navigating ambiguity for remote & hybrid teams by working backwards from user experience, with a proven track record of reducing costs while improving performance and developer productivity.", | |
| "location": { |
| // @ts-check | |
| /** | |
| * Run `tsc` and pipe output to this script. All errors will write a `@ts-expect-error` comment into the source. | |
| * | |
| * Usage: | |
| * | |
| * tsc --noEmit --project ... | ./ts-expect-error.js | |
| * | |
| * Example (from the monorepo root): |
| import type {CodegenConfig} from '@graphql-codegen/cli'; | |
| const config: CodegenConfig = { | |
| config: { | |
| namingConvention: { | |
| // Ensure enum values are the same as their name, not a number or camelCased | |
| enumValues: 'keep', | |
| }, | |
| }, | |
| schema: ['src/**/schema.graphql'], |
| # https://github.com/dependabot/fetch-metadata#enabling-auto-merge | |
| name: Auto-merge Dependabot | |
| on: pull_request_target | |
| permissions: | |
| pull-requests: write | |
| contents: write | |
| jobs: |
| import Layout from "@/components/Layout"; | |
| import { getContentPaths } from "@/utils/getContentPaths"; | |
| import { getPageFromSlug } from "@/utils/getPageFromSlug"; | |
| import { GetStaticProps } from "next"; | |
| import dynamic from "next/dynamic"; | |
| import { renderToStaticMarkup } from "react-dom/server"; | |
| export default function ContentPage({ __html, frontmatter, pages, slug }) { | |
| const Content = dynamic(() => import(`../content/${slug}/index.mdx`), { | |
| loading() { |
| // This state machine is trying to figure out how to allow a user to call `await Auth.getUser()` multiple times throughout their app and get the current user once it resolves. | |
| // Utility to resolve a Promise externally | |
| const defer = () => { | |
| let res,rej; | |
| const promise = new Promise((resolve, reject) => { | |
| res = resolve; | |
| rej = reject; |
| <link rel="stylesheet" href="https://unpkg.com/tailwindcss@1.0.1/dist/tailwind.min.css"> | |
| <!-- Responsive indicators! --> | |
| <div class="fixed top-0 right-0 z-50 bg-pink-500 text-white shadow-md px-2 rounded-bl font-mono"> | |
| <span class="sm:hidden">default</span> | |
| <span class="hidden sm:inline md:hidden">sm</span> | |
| <span class="hidden md:inline lg:hidden">md</span> | |
| <span class="hidden lg:inline xl:hidden">lg</span> | |
| <span class="hidden xl:inline">xl</span> | |
| </div> |
Zach Silveira was kind enough to create a video tutorial:
https://www.youtube.com/watch?v=apZwd0FqQu4&feature=youtu.be
Here are my notes as I followed along...