Skip to content

Commit de98bb0

Browse files
committed
docs: add measured AI workflow messaging
Tone down the landing page AI copy so it stays closer to the existing positioning while still calling out coding-agent workflows. Add a linked guide page for the follow-on explanation without changing the homepage hero copy.
1 parent 2366fb2 commit de98bb0

2 files changed

Lines changed: 131 additions & 60 deletions

File tree

app/routes/LandingPage.res

Lines changed: 98 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ export {
8585
<section className="relative mt-20 bg-gray-10">
8686
<div className="relative flex justify-center w-full">
8787
<div className="relative w-full pt-6 pb-8 sm:px-8 md:px-16 max-w-[1400px]">
88+
<div className="relative z-2 mx-auto mb-10 max-w-3xl text-center">
89+
<h2 className="hl-2 text-gray-80"> {React.string("Readable in. Predictable out.")} </h2>
90+
<p className="body-lg text-gray-60 mt-4">
91+
{React.string(`Readable source, predictable output, and fast compiler feedback are useful whether changes come from a person or a coding agent. ReScript keeps the edit-review-fix loop tight for both humans and tools.`)}
92+
</p>
93+
</div>
8894
// Playground widget
8995
<div
9096
className="relative z-2 flex flex-col md:flex-row bg-gray-90 mx-auto sm:rounded-lg max-w-1280"
@@ -251,12 +257,6 @@ module QuickInstall = {
251257
@react.component
252258
let make = () => {
253259
<div className="w-full max-w-400">
254-
<h2 className="hl-3 lg:mt-12"> {React.string("Quick Install")} </h2>
255-
<div className="captions x text-gray-40 mb-2 mt-1">
256-
{React.string(
257-
"You can quickly add ReScript to your existing JavaScript codebase via npm / yarn:",
258-
)}
259-
</div>
260260
<div className="w-full space-y-2"> {copyBox("npm install rescript")} </div>
261261
<div className="captions x text-gray-40 mb-2 mt-2">
262262
{React.string("Or generate a new project from the official template with npx:")}
@@ -269,26 +269,15 @@ module QuickInstall = {
269269
@react.component
270270
let make = () => {
271271
<section className="my-32 sm:px-4 sm:flex sm:justify-center">
272-
<div className="max-w-1060 flex flex-col w-full px-5 md:px-8 lg:px-8 lg:box-content ">
273-
//---Textblock on the left side---
274-
<div className="relative max-w-112">
275-
<p
276-
className="relative z-1 space-y-12 text-gray-80 font-semibold text-24 md:text-32 leading-2"
277-
>
278-
<span className="bg-fire-5 rounded-lg border border-fire-10 p-1 ">
279-
{React.string(`Leverage the full power`)}
280-
</span>
281-
{React.string(` of JavaScript in a robustly typed language without the fear of \`any\` types.`)}
282-
</p>
283-
</div>
284-
//spacing between columns
285-
<div className="w-full mt-12 md:flex flex-col lg:flex-row md:justify-between ">
286-
<p
287-
className="relative z-1 text-gray-80 font-semibold text-24 md:text-32 leading-2 max-w-lg"
288-
>
289-
{React.string(`ReScript is used to ship and maintain mission-critical products with good UI and UX.`)}
290-
</p>
291-
<div className="mt-16 lg:mt-0 self-end max-w-400">
272+
<div className="max-w-1060 flex flex-col gap-12 w-full px-5 md:px-8 lg:px-8 lg:box-content">
273+
<div className="w-full flex flex-col lg:flex-row lg:justify-between lg:items-end gap-12">
274+
<div className="max-w-2xl">
275+
<h2 className="hl-2 text-gray-80 mb-4"> {React.string("Quick Install")} </h2>
276+
<p className="body-lg text-gray-60">
277+
{React.string(`You can quickly add ReScript to an existing JavaScript codebase in minutes. That low setup overhead also makes it easy to experiment in fast-moving teams, including ones trying AI-assisted workflows.`)}
278+
</p>
279+
</div>
280+
<div className="self-start lg:self-end max-w-400">
292281
<Instructions />
293282
</div>
294283
</div>
@@ -379,22 +368,7 @@ module MainUSP = {
379368
media={<video className="rounded-lg" controls={true} poster={"/lp/fast-build-preview.avif"}>
380369
<source src="https://assets-17077.kxcdn.com/videos/fast-build-3.mp4" type_="video/mp4" />
381370
</video>}
382-
paragraph={<>
383-
<p>
384-
{React.string(`ReScript cares about a consistent and fast
385-
feedback loop for any codebase size. Refactor code, pull complex changes,
386-
or switch to feature branches as you please. No sluggish CI builds, stale
387-
caches, wrong type hints, or memory hungry language servers that slow you
388-
down.`)}
389-
</p>
390-
<p className="mt-6">
391-
// <ReactRouter.Link to={("/docs/manual/build-performance" :> ReactRouter.Link.to)}>
392-
// <Button size={Button.Small} kind={Button.PrimaryBlue}>
393-
// {React.string("Learn more")}
394-
// </Button>
395-
// </ReactRouter.Link>
396-
</p>
397-
</>}
371+
paragraph={React.string(`ReScript cares about a consistent and fast feedback loop for any codebase size. Refactor code, pull complex changes, or switch to feature branches as you please. That same speed also makes AI-assisted iteration much easier to validate and keep moving.`)}
398372
/>
399373

400374
let item2 =
@@ -409,12 +383,7 @@ module MainUSP = {
409383
<source src="https://assets-17077.kxcdn.com/videos/type-better-3.mp4" type_="video/mp4" />
410384
</video>}
411385
polygonDirection=Up
412-
paragraph={React.string(`Every ReScript app is fully typed and provides
413-
reliable type information for any given value in your program. We
414-
prioritize simpler types over complex types for the sake of
415-
clarity and easy debugability. No \`any\`, no magic types, no surprise
416-
\`undefined\`.
417-
`)}
386+
paragraph={React.string(`Every ReScript app is fully typed and provides reliable type information for any given value in your program. We prioritize simpler types over complex types for the sake of clarity and easy debugability. That also makes AI-generated changes easier to review and correct.`)}
418387
/>
419388

420389
let item3 =
@@ -431,9 +400,7 @@ module MainUSP = {
431400
src="https://assets-17077.kxcdn.com/videos/interop-example-2.mp4" type_="video/mp4"
432401
/>
433402
</video>}
434-
paragraph={React.string(`Use any library from JavaScript, export ReScript
435-
libraries to JavaScript, automatically generate TypeScript types. It's
436-
like you've never left the good parts of JavaScript at all.`)}
403+
paragraph={React.string(`Use any library from JavaScript, export ReScript libraries to JavaScript, automatically generate TypeScript types. It's like you've never left the good parts of JavaScript at all, including the SDKs and tools that power modern AI products.`)}
437404
/>
438405

439406
@react.component
@@ -446,6 +413,57 @@ module MainUSP = {
446413
}
447414
}
448415

416+
module AgenticWorkflows = {
417+
type point = {
418+
title: string,
419+
body: string,
420+
}
421+
422+
let points = [
423+
{
424+
title: "Readable code helps agents stay on track",
425+
body: "ReScript's syntax is small, consistent, and easy to scan, which makes generated edits easier to inspect and prompts easier to ground in real code.",
426+
},
427+
{
428+
title: "Compiler errors create a tighter repair loop",
429+
body: "Instead of vague runtime failures, agents get concrete feedback about what is wrong and where the contract broke. That makes iterative repair much more reliable.",
430+
},
431+
{
432+
title: "Humans can still review the result",
433+
body: "ReScript compiles to straightforward JavaScript, so teams can inspect output, debug behavior, and keep handoff between human and agent work understandable.",
434+
},
435+
]
436+
437+
@react.component
438+
let make = () => {
439+
<section className="flex justify-center w-full bg-fire-5 px-5 sm:px-8 lg:px-16 py-24 lg:py-32">
440+
<div className="max-w-1060 w-full">
441+
<div className="max-w-3xl">
442+
<h2 className="hl-1 text-gray-80">
443+
{React.string("Why ReScript works well with coding agents")}
444+
</h2>
445+
<p className="body-lg text-gray-60 mt-4">
446+
{React.string(`Coding agents tend to work best when the surrounding system is readable, predictable, and easy to review. ReScript helps by keeping the source language simple, the compiler feedback fast, and the generated output understandable.`)}
447+
</p>
448+
</div>
449+
<div className="grid gap-6 mt-12 lg:mt-16 md:grid-cols-3">
450+
{points
451+
->Array.mapWithIndex((point, i) =>
452+
<div
453+
key={Int.toString(i)}
454+
className="rounded-xl border border-fire-10 bg-white px-6 py-6 shadow-[0px_12px_40px_0px_rgba(230,72,79,0.08)]"
455+
>
456+
<h3 className="hl-4 text-gray-80 mb-3"> {React.string(point.title)} </h3>
457+
<p className="body-md text-gray-60"> {React.string(point.body)} </p>
458+
</div>
459+
)
460+
->React.array}
461+
</div>
462+
</div>
463+
</section>
464+
}
465+
}
466+
449467
module OtherSellingPoints = {
450468
@react.component
451469
let make = () => {
@@ -467,11 +485,7 @@ module OtherSellingPoints = {
467485
{React.string(`A community of programmers who value getting things done`)}
468486
</h3>
469487
<p className="body-md text-gray-40">
470-
{React.string(`No language can be popular without a solid
471-
community. A great type system isn't useful if library authors
472-
abuse it. Performance doesn't show if all the libraries are slow.
473-
Join the ReScript community — A group of companies and individuals
474-
who deeply care about simplicity, speed and practicality.`)}
488+
{React.string(`No language can be popular without a solid community. A great type system isn't useful if library authors abuse it. Performance doesn't show if all the libraries are slow. That pragmatic mindset matters even more when teams start using coding agents and need changes to stay understandable.`)}
475489
</p>
476490
<div className="mt-6">
477491
<a href="https://forum.rescript-lang.org">
@@ -492,10 +506,7 @@ module OtherSellingPoints = {
492506
{React.string(`Tooling that just works out of the box`)}
493507
</h3>
494508
<p className="body-md text-gray-40">
495-
{React.string(`A builtin pretty printer, memory friendly
496-
VSCode & Vim plugins, a stable type system and compiler that doesn't require lots
497-
of extra configuration. ReScript brings all the tools you need to
498-
build reliable JavaScript, Node and ReactJS applications.`)}
509+
{React.string(`A builtin pretty printer, memory friendly VSCode and Vim plugins, and a stable compiler keep the workflow tight without lots of extra configuration. That's especially useful when both humans and AI tools are contributing changes.`)}
499510
</p>
500511
</div>
501512
// Item 3
@@ -556,6 +567,31 @@ module TrustedBy = {
556567
}
557568
}
558569

570+
module AgenticGuideCTA = {
571+
@react.component
572+
let make = () => {
573+
<section className="px-5 sm:px-8 lg:px-16 py-20">
574+
<div
575+
className="max-w-1060 mx-auto rounded-2xl border border-gray-80 bg-gray-90 px-8 py-10 lg:px-12 lg:py-12 flex flex-col gap-8 lg:flex-row lg:items-center lg:justify-between"
576+
>
577+
<div className="max-w-2xl">
578+
<h2 className="hl-2 text-gray-10 mb-3">
579+
{React.string("Learn more about ReScript and coding agents")}
580+
</h2>
581+
<p className="body-lg text-gray-30">
582+
{React.string(`Read a short guide on why readable source, strong types, and fast compiler feedback help when humans and coding agents work together.`)}
583+
</p>
584+
</div>
585+
<ReactRouter.Link.String
586+
to="/docs/manual/agentic-workflows" className="self-start shrink-0"
587+
>
588+
<Button kind={Button.PrimaryBlue}> {React.string("Read the guide")} </Button>
589+
</ReactRouter.Link.String>
590+
</div>
591+
</section>
592+
}
593+
}
594+
559595
module CuratedResources = {
560596
type card = {
561597
imgSrc: string,
@@ -723,8 +759,10 @@ let make = (~components=MarkdownComponents.default) => {
723759
<PlaygroundHero />
724760
<QuickInstall />
725761
<MainUSP />
762+
<AgenticWorkflows />
726763
<OtherSellingPoints />
727764
<TrustedBy />
765+
<AgenticGuideCTA />
728766
<CuratedResources />
729767
</div>
730768
</div>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
title: "ReScript and Coding Agents"
3+
description: "How ReScript supports teams working with coding agents"
4+
canonical: "/docs/manual/agentic-workflows"
5+
section: "Guides"
6+
order: 4
7+
---
8+
9+
# ReScript and Coding Agents
10+
11+
ReScript is a strong fit for teams working with coding agents because it reduces ambiguity in the source language, surfaces errors early through the compiler, and keeps generated output understandable. This guide explains why those properties matter in real development workflows.
12+
13+
## Readable code is easier to steer
14+
15+
Agents do better when the language they are editing is small, regular, and easy to inspect. ReScript keeps the syntax compact and consistent, which makes prompts easier to ground in the actual code and makes generated changes easier for humans to review.
16+
17+
## Compiler feedback tightens the repair loop
18+
19+
When an agent makes an incorrect assumption, fast compiler feedback matters. ReScript turns many mistakes into concrete, local errors instead of vague runtime failures, which gives both the agent and the human reviewer a clearer path to the next fix.
20+
21+
## Reviewable JavaScript keeps handoff practical
22+
23+
ReScript compiles to straightforward JavaScript, so teams can still inspect output, debug behavior, and understand how a change behaves in the wider JavaScript ecosystem. That keeps the handoff between agent-written code and human review practical.
24+
25+
## You can keep your existing stack
26+
27+
Using ReScript does not mean walking away from the JavaScript ecosystem your product already depends on. You can keep using the SDKs, APIs, frameworks, and deployment tooling your team already knows while adding stronger guarantees where correctness and maintainability matter most.
28+
29+
## Where to start
30+
31+
- For setup, see [Installation](./installation.mdx).
32+
- For adding ReScript to an existing codebase, see [Converting from JS](./converting-from-js.mdx).
33+
- For editor and compiler feedback loops, see [Code Analysis](./editor-code-analysis.mdx).

0 commit comments

Comments
 (0)