16- simple event tracking, so Glance can see which features of the demo get engagement
17
18When describing the features above, include brief but specific code examples, so the viewer has context. For example, show some code that includes the feature, like the Hono route for the /demo/:id, the Glance session javascript in the React /frontend, the examplePDF viewer and headers.
19
20## Second, orient the reader to the codebase
22Include:
23
241. a tree diagram, with a brief explanation of each area of the code base, starting at the highest level with /backend and what it does, /frontend and what it does, and /shared and what it does. Note that this project extends val.town's recommended approach for using Hono and React together, explained at https://www.val.town/x/std/reactHonoStarter
252. a list of all the framework elements in this project and a short description of each, including but not limited to:
26
30- caching with blob storage
31- crons to update the cache
32- React/JSX for interface templates and tailwind
33
34## Third, explain the following technical implementation details
35
36- React /frontend
37- Hono /backend/routes, including
38 - index.ts and what it does, and the routing strategy it establishes, including
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
3import { App } from "./components/App.tsx";
4
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2
3export function IframeContent({ data, content }) {
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { Hono } from "npm:hono";
3import { renderToString } from "https://esm.sh/react-dom@18.2.0/server?deps=react@18.2.0";
4
5const app = new Hono();
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2
3export function GettingStartedContent({ data, title }) {
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { useState } from "https://esm.sh/react@18.2.0";
3
4export function FormContent({ data, content }) {
3 "lock": false,
4 "compilerOptions": {
5 "jsx": "react-jsx",
6 "jsxImportSource": "https://esm.sh/react@18.2.0",
7 "jsxImportSourceTypes": "https://esm.sh/react@18.2.0",
8
9 "noImplicitAny": false,
189- **Imports:** Use `https://esm.sh` for npm and Deno dependencies to ensure compatibility on server and browser
190- **Storage Strategy:** Only use backend storage if explicitly required; prefer simple static client-side sites
191- **React Configuration:** When using React libraries, pin versions with `?deps=react@18.2.0,react-dom@18.2.0` and start the file with `/** @jsxImportSource https://esm.sh/react@18.2.0 */`
192- Ensure all React dependencies and sub-dependencies are pinned to the same version
193- **Styling:** Default to using TailwindCSS via `<script src="https://cdn.twind.style" crossorigin></script>` unless otherwise specified
194
275 - Always run table creation before querying
276
2773. **React Configuration:**
278 - All React dependencies must be pinned to 18.2.0
279 - Always include `@jsxImportSource https://esm.sh/react@18.2.0` at the top of React files
280 - Rendering issues often come from mismatched React versions
281
2824. **File Handling:**
1/** @jsxImportSource https://esm.sh/react */
2import { analyticsHandlerWrapper } from "https://esm.town/v/maxm/valTownAnalytics";
3import { Chess, Move, Square } from "npm:chess.js";
4import minify from "npm:css-simple-minifier";
5import { renderToString } from "npm:react-dom/server";
6
7class StaticChess {
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2
3export function ChessEmbedIframe({ config }) {