1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
3import React, { useState } from "https://esm.sh/react@18.2.0";
4
5const NO_PHRASES = [
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
3import React, { useState } from "https://esm.sh/react@18.2.0";
4
5const NO_PHRASES = [
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
3import React, { useState } from "https://esm.sh/react@18.2.0";
4
5const NO_PHRASES = [
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
3import React, { useState } from "https://esm.sh/react@18.2.0";
4
5const NO_PHRASES = [
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
3import React, { useState } from "https://esm.sh/react@18.2.0";
4
5const NO_PHRASES = [
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { renderToString } from "https://esm.sh/react-dom@18.2.0/server";
3import {
4 listFilesByPath,
5 readFile,
6} from "https://esm.town/v/std/utils/index.ts";
7import ReactMarkdown from "https://esm.sh/react-markdown@9?deps=react@18.2.0";
8import rehypeSlug from "https://esm.sh/rehype-slug@6?deps=react@18.2.0";
9import rehypeAutolinkHeadings from "https://esm.sh/rehype-autolink-headings@7?deps=react@18.2.0";
10import rehypeRaw from "https://esm.sh/rehype-raw@7?deps=react@18.2.0";
11import ValTown from "npm:@valtown/sdk@1.9.0";
12import { PostTemplate } from "./PostTemplate.tsx";
76 renderToString(
77 <PostTemplate title={title} ogImage={ogImage}>
78 <ReactMarkdown
79 rehypePlugins={[rehypeRaw, rehypeSlug, [rehypeAutolinkHeadings, { behavior: "wrap" }]]}
80 >{content}</ReactMarkdown>
81 {tags.length > 0 && (
82 <div style={{ marginTop: "3rem", paddingTop: "1.5rem", borderTop: "1px solid #e5e7eb", fontSize: "0.875rem", color: "#6b7280" }}>
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { renderToString } from "npm:react-dom@18.2.0/server";
3import { getHits } from "./analytics.ts";
4import { Link } from "./helpers.tsx";
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2
3interface PostTemplateProps {
5 description?: string;
6 ogImage?: string;
7 children: React.ReactNode;
8}
9
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { renderToString } from "https://esm.sh/react-dom@18.2.0/server";
3import { Homepage } from "./index.tsx";
4import { Hono } from "npm:hono@4.0.0";
93Ultimately, in my opinion, there is irreducible complexity in building software, and thinking that we can paper over it with english and smarter agents is wrong. It's not having enough respect for the underlying complexity, and how hard it is to build better abstractions.
94
95I've spent years of my life trying to build better abstractions and programming languages, ie improvements over react or http to make it easier for folks to build web apps. It's hard! At the end of the day, the state of the art is complex React, plus a hand-rolled server, and a lot of hard engineering work to make it all work.
96
97Don't you think if there were better abstractions available us programmers would use them?