Skip to content

Commit 1baf2ad

Browse files
committed
feat: add /llms.txt route for AI agent discovery
Implements the llms.txt standard (https://llmstxt.org/) to make Frontside's open source projects discoverable by AI agents. - Add assets/llms.txt with content describing Frontside services and projects - Add routes/llms-txt-route.ts that reads and serves the llms.txt file - Wire route in main.tsx before legacy proxy catch-all - Upgrade effection from 3.2.0 to 3.6.1
1 parent 6a44214 commit 1baf2ad

File tree

4 files changed

+60
-1
lines changed

4 files changed

+60
-1
lines changed

assets/llms.txt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Frontside
2+
3+
> Frontside is a software consultancy specializing in Developer Experience (DX),
4+
> internal developer platforms, and open source tools for JavaScript.
5+
6+
Frontside helps engineering teams build better developer experiences, from local
7+
development environments to production deployment pipelines. We specialize in
8+
Backstage implementation, testing strategy, and structured concurrency.
9+
10+
## Services
11+
12+
- [DX Consulting](https://frontside.com/dx-consulting): Developer experience consulting for Cloud native teams
13+
- [Backstage Implementation](https://frontside.com/backstage): Internal developer portal expertise and plugin development
14+
15+
## Open Source Projects
16+
17+
- [Effection](https://frontside.com/effection/llms.txt): Structured concurrency for JavaScript - see detailed llms.txt for API docs and extension packages
18+
- [Interactors](https://frontside.com/interactors): Page objects for component library testing
19+
- [GraphGen](https://frontside.com/graphgen): Generate realistic graph data for testing
20+
21+
## Blog
22+
23+
Technical articles on DX, testing, Backstage, and JavaScript. Notable posts:
24+
25+
- [Announcing Effection 4.0](https://frontside.com/blog/2025-12-23-announcing-effection-v4): Major release with improved determinism
26+
- [The Heartbreaking Inadequacy of AbortController](https://frontside.com/blog/2025-08-04-the-heartbreaking-inadequacy-of-abort-controller): Why JavaScript needs structured concurrency
27+
- [Effection: When async/await is not enough](https://frontside.com/blog/2021-10-26-effection-async-await): Introduction to structured concurrency
28+
29+
## Optional
30+
31+
- [All blog posts](https://frontside.com/blog)
32+
- [About Frontside](https://frontside.com/about)
33+
- [Contact](https://frontside.com/contact)
34+
- [Case Study: Resideo](https://frontside.com/work/case-studies/resideo)

deno.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"jsxImportSource": "revolution"
1919
},
2020
"imports": {
21-
"effection": "jsr:@effection/effection@3.2.0",
21+
"effection": "jsr:@effection/effection@3.6.1",
22+
"@effectionx/fs": "npm:@effectionx/fs",
2223
"hast": "npm:hast@^1.0.0",
2324
"revolution": "https://deno.land/x/revolution@0.6.1/mod.ts",
2425
"revolution/jsx-runtime": "https://deno.land/x/revolution@0.6.1/jsx-runtime.ts"

main.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { backstageServicesRoute } from "./routes/backstage.html.tsx";
1010
import { dxConsultingServicesRoute } from "./routes/dx-consulting.html.tsx";
1111
import { pluginWorkshopRoute } from "./routes/advanced-backstage-plugin-development-route.tsx";
1212
import { resideoBackstageCaseStudyRoute } from "./routes/work/case-studies/case-study-resideo.html.tsx";
13+
import { llmsTxtRoute } from "./routes/llms-txt-route.ts";
1314

1415
import { etagPlugin } from "./plugins/etag.ts";
1516
import { currentRequestPlugin } from "./plugins/current-request.ts";
@@ -31,6 +32,7 @@ await main(function* (args) {
3132

3233
let revolution = createRevolution({
3334
app: [
35+
route("/llms.txt", llmsTxtRoute()),
3436
route("/", indexRoute()),
3537
route("/blog", blogIndexRoute()),
3638
route("/blog/:id", blogPostRoute()),

routes/llms-txt-route.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { HTTPMiddleware } from "revolution";
2+
import { call } from "effection";
3+
4+
/**
5+
* Serves the /llms.txt file for AI agent discovery.
6+
*
7+
* This follows the llms.txt standard (https://llmstxt.org/) to help
8+
* AI agents understand and navigate Frontside's content and projects.
9+
*/
10+
export function llmsTxtRoute(): HTTPMiddleware {
11+
return function* () {
12+
const content = yield* call(() =>
13+
Deno.readTextFile(new URL("../assets/llms.txt", import.meta.url))
14+
);
15+
return new Response(content, {
16+
headers: {
17+
"Content-Type": "text/plain; charset=utf-8",
18+
"Cache-Control": "public, max-age=3600",
19+
},
20+
});
21+
};
22+
}

0 commit comments

Comments
 (0)