import { Link } from "react-router-dom";
const workflow = [
{
label: "Input",
title: "Choose a tool",
copy: "Paste text, pick a file, or adjust options in a generated tool panel.",
icon: (
),
},
{
label: "Run",
title: "Process locally",
copy: "The plugin runs in your browser using JavaScript, workers, Canvas, or PDF libraries.",
icon: (
<>
>
),
},
{
label: "Output",
title: "Copy or download",
copy: "Results appear immediately in the page. Files stay on the device unless you export them.",
icon: (
<>
>
),
},
];
const principles = [
{
title: "No upload step",
copy: "Plimi does not send your inputs to an application server for conversion.",
},
{
title: "Plugin boundaries",
copy: "Each utility declares its own inputs, options, permissions, and result type.",
},
{
title: "Responsive execution",
copy: "Heavier work can move off the main interface thread so the page stays usable.",
},
{
title: "Explicit results",
copy: "Tools return structured outputs: copied text, rendered previews, or downloadable files.",
},
];
const layers = [
{ name: "Tool manifest", detail: "Inputs, options, permissions" },
{ name: "Generated UI", detail: "Forms, sliders, selects, validation" },
{ name: "Runner", detail: "Browser APIs, workers, local libraries" },
{ name: "Result panel", detail: "Preview, copy, download" },
];
function IconFrame({ children }: { children: React.ReactNode }) {
return (
);
}
export function HowItWorksPage() {
return (
browser-first architecture
Your files stay where they started.
Plimi is a collection of small local utilities. The interface loads the tool, runs the
work in the browser, then hands the result back to you without a server round trip.
{workflow.map((step, index) => (
{step.icon}
{String(index + 1).padStart(2, "0")}
{step.label}
{step.title}
{step.copy}
))}
{principles.map((item) => (
{item.title}
{item.copy}
))}
plugin model
One shell, many tools.
Plimi keeps the application shell simple. Each tool contributes a compact manifest and
a runner, so new utilities can share the same dependable interface.
{layers.map((layer, index) => (
{index + 1}
{layer.name}
{layer.detail}
))}
Ready to run something?
Pick a utility and the same local workflow applies.