mirror of
https://github.com/dathere/ckan-devstaller.git
synced 2025-12-28 11:37:00 +00:00
Compare commits
No commits in common. "0e263202a1590b18dbd6021bb50b3287c4ecad58" and "93fcb8a2c568528b709a1c6c314d02f014fdfb1b" have entirely different histories.
0e263202a1
...
93fcb8a2c5
3 changed files with 30 additions and 267 deletions
|
|
@ -1,7 +1,6 @@
|
||||||
/** biome-ignore-all lint/suspicious/noArrayIndexKey: Would need to look into this trivial issue */
|
/** biome-ignore-all lint/suspicious/noArrayIndexKey: Would need to look into this trivial issue */
|
||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { CodeBlock } from "fumadocs-ui/components/codeblock";
|
|
||||||
import defaultMdxComponents from "fumadocs-ui/mdx";
|
import defaultMdxComponents from "fumadocs-ui/mdx";
|
||||||
import { cn } from "fumadocs-ui/utils/cn";
|
import { cn } from "fumadocs-ui/utils/cn";
|
||||||
import {
|
import {
|
||||||
|
|
@ -9,14 +8,11 @@ import {
|
||||||
GitMergeIcon,
|
GitMergeIcon,
|
||||||
HomeIcon,
|
HomeIcon,
|
||||||
SailboatIcon,
|
SailboatIcon,
|
||||||
TerminalIcon,
|
|
||||||
Trash2Icon,
|
|
||||||
ZapIcon,
|
ZapIcon,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { type HTMLProps, type ReactNode, useState } from "react";
|
import { useState } from "react";
|
||||||
import { Pre } from "@/components/codeblock";
|
|
||||||
import { buttonVariants } from "@/components/ui/button";
|
import { buttonVariants } from "@/components/ui/button";
|
||||||
import CkanDevstallerDemo from "./ckan-devstaller-demo.gif";
|
import CkanDevstallerDemo from "./ckan-devstaller-demo.gif";
|
||||||
|
|
||||||
|
|
@ -41,34 +37,8 @@ export default function HomePage() {
|
||||||
>
|
>
|
||||||
<div className="relative mb-4">
|
<div className="relative mb-4">
|
||||||
<Hero />
|
<Hero />
|
||||||
<Why />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr className="mt-12 mb-4" />
|
|
||||||
<footer className="flex flex-col bg-brand-secondary pb-12 text-brand-secondary-foreground rounded-2xl">
|
|
||||||
<p className="mb-1 text-xl font-semibold">ckan-devstaller</p>
|
|
||||||
<p className="text-xs">
|
|
||||||
Provided by{" "}
|
|
||||||
<a
|
|
||||||
href="https://dathere.com"
|
|
||||||
target="_blank"
|
|
||||||
className="font-medium text-blue-400"
|
|
||||||
rel="noopener"
|
|
||||||
>
|
|
||||||
datHere
|
|
||||||
</a>
|
|
||||||
.{" "}
|
|
||||||
<a
|
|
||||||
href="https://dathere.com/privacy-policy/"
|
|
||||||
target="_blank"
|
|
||||||
className="font-medium text-blue-400"
|
|
||||||
rel="noopener"
|
|
||||||
>
|
|
||||||
Privacy Policy
|
|
||||||
</a>
|
|
||||||
.
|
|
||||||
</p>
|
|
||||||
</footer>
|
|
||||||
</main>
|
</main>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
@ -139,7 +109,11 @@ function Hero() {
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
<Cards>
|
<Cards>
|
||||||
<Card icon={<ZapIcon />} href="/docs" title="Quick start">
|
<Card
|
||||||
|
icon={<ZapIcon />}
|
||||||
|
href="/docs"
|
||||||
|
title="Quick start"
|
||||||
|
>
|
||||||
Get started with ckan-devstaller and install CKAN within minutes
|
Get started with ckan-devstaller and install CKAN within minutes
|
||||||
</Card>
|
</Card>
|
||||||
<Card icon={<BlocksIcon />} href="/docs/builder" title="Builder">
|
<Card icon={<BlocksIcon />} href="/docs/builder" title="Builder">
|
||||||
|
|
@ -150,7 +124,8 @@ function Hero() {
|
||||||
href="/docs/reference/installation-architecture"
|
href="/docs/reference/installation-architecture"
|
||||||
title="Installation architecture"
|
title="Installation architecture"
|
||||||
>
|
>
|
||||||
Learn about where files are installed after running ckan-devstaller
|
Learn about where files are installed after running
|
||||||
|
ckan-devstaller
|
||||||
</Card>
|
</Card>
|
||||||
<Card
|
<Card
|
||||||
icon={<GitMergeIcon />}
|
icon={<GitMergeIcon />}
|
||||||
|
|
@ -209,213 +184,3 @@ function PreviewImages() {
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Why() {
|
|
||||||
return (
|
|
||||||
<div className="relative overflow-hidden border-x border-t p-2">
|
|
||||||
<WhyInteractive
|
|
||||||
codeblockInstall={
|
|
||||||
<CodeBlock lang="bash">
|
|
||||||
<Pre className="text-wrap pl-4">./ckan-devstaller</Pre>
|
|
||||||
</CodeBlock>
|
|
||||||
}
|
|
||||||
codeblockUninstall={
|
|
||||||
<CodeBlock lang="bash">
|
|
||||||
<Pre className="text-wrap pl-4">./ckan-devstaller uninstall</Pre>
|
|
||||||
</CodeBlock>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function WhyInteractive(props: {
|
|
||||||
codeblockInstall: ReactNode;
|
|
||||||
codeblockUninstall: ReactNode;
|
|
||||||
}) {
|
|
||||||
const [active, setActive] = useState(0);
|
|
||||||
const items = [
|
|
||||||
[
|
|
||||||
<ZapIcon className="w-4 h-4 inline-block" key={0} />,
|
|
||||||
"Install CKAN within minutes",
|
|
||||||
],
|
|
||||||
[
|
|
||||||
<BlocksIcon className="w-4 h-4 inline-block" key={1} />,
|
|
||||||
"Customize your installation",
|
|
||||||
],
|
|
||||||
[
|
|
||||||
<TerminalIcon className="w-4 h-4 inline-block" key={2} />,
|
|
||||||
"Designed for developers",
|
|
||||||
],
|
|
||||||
[
|
|
||||||
<Trash2Icon className="w-4 h-4 inline-block" key={3} />,
|
|
||||||
"Uninstall with ease",
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
id="why-interactive"
|
|
||||||
className="flex flex-col-reverse gap-3 md:flex-row md:min-h-[200px]"
|
|
||||||
>
|
|
||||||
<div className="flex flex-col">
|
|
||||||
{items.map((item, i) => (
|
|
||||||
<button
|
|
||||||
key={item[1] as string}
|
|
||||||
ref={(element) => {
|
|
||||||
if (!element || i !== active) return;
|
|
||||||
}}
|
|
||||||
type="button"
|
|
||||||
className={cn(
|
|
||||||
"transition-colors text-nowrap border border-transparent rounded-lg px-3 py-2.5 text-start text-sm text-fd-muted-foreground font-medium",
|
|
||||||
i === active
|
|
||||||
? "text-fd-primary bg-fd-primary/10 border-fd-primary/10"
|
|
||||||
: "hover:text-fd-accent-foreground/80 cursor-pointer",
|
|
||||||
)}
|
|
||||||
onClick={() => {
|
|
||||||
setActive(i);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{item[0]} {item[1]}
|
|
||||||
</button>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
<style>
|
|
||||||
{`
|
|
||||||
@keyframes why-interactive-x {
|
|
||||||
from {
|
|
||||||
width: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
to {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}`}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<div className="flex-1 p-4 border border-fd-primary/10 bg-fd-card/40 rounded-lg shadow-lg">
|
|
||||||
{active === 0 ? (
|
|
||||||
<WhyPanel>
|
|
||||||
<h3>
|
|
||||||
<ZapIcon className="w-4 h-4 inline-block mr-1 mb-1" />
|
|
||||||
Install CKAN within minutes.
|
|
||||||
</h3>
|
|
||||||
<p>
|
|
||||||
One of the primary goals of ckan-devstaller is to ease
|
|
||||||
installation of CKAN for development. Built with Rust for speed
|
|
||||||
and streamlining installation with{" "}
|
|
||||||
<a href="https://github.com/tino097/ckan-compose/tree/ckan-devstaller">
|
|
||||||
ckan-compose
|
|
||||||
</a>
|
|
||||||
, ckan-devstaller improves installation speeds{" "}
|
|
||||||
<strong>from hours/days to just minutes</strong> depending on your
|
|
||||||
download speed.
|
|
||||||
</p>
|
|
||||||
<div className="flex gap-2">
|
|
||||||
<Link href="/docs" className={cn(buttonVariants(), "not-prose")}>
|
|
||||||
Get started
|
|
||||||
</Link>
|
|
||||||
<Link
|
|
||||||
href="/docs/builder"
|
|
||||||
className={cn(buttonVariants(), "not-prose")}
|
|
||||||
>
|
|
||||||
Customize your installation
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</WhyPanel>
|
|
||||||
) : null}
|
|
||||||
{active === 1 ? (
|
|
||||||
<WhyPanel>
|
|
||||||
<h3>
|
|
||||||
<BlocksIcon className="w-4 h-4 inline-block mr-1 mb-1" />
|
|
||||||
Customize your installation with the Builder.
|
|
||||||
</h3>
|
|
||||||
<p>
|
|
||||||
Try out the interactive web GUI for customizing your CKAN
|
|
||||||
installation. You can select:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Presets</li>
|
|
||||||
<li>CKAN version</li>
|
|
||||||
<li>Extensions</li>
|
|
||||||
<li>Features</li>
|
|
||||||
</ul>
|
|
||||||
<p>
|
|
||||||
Then you can copy the provided ckan-devstaller command to run your
|
|
||||||
selected configuration.
|
|
||||||
</p>
|
|
||||||
<div className="mt-4 flex flex-row items-center gap-1.5 not-prose">
|
|
||||||
<Link href="/docs/builder" className={cn(buttonVariants())}>
|
|
||||||
Try out the Builder
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</WhyPanel>
|
|
||||||
) : null}
|
|
||||||
{active === 2 ? (
|
|
||||||
<WhyPanel>
|
|
||||||
<h3>
|
|
||||||
<TerminalIcon className="w-4 h-4 inline-block mr-1 mb-1" />
|
|
||||||
Designed for developers.
|
|
||||||
</h3>
|
|
||||||
<p>
|
|
||||||
We've kept development use cases in mind while developing
|
|
||||||
ckan-devstaller, such as:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Trying out a new version of CKAN</li>
|
|
||||||
<li>Developing CKAN extensions and themes</li>
|
|
||||||
</ul>
|
|
||||||
<div className="flex gap-2">
|
|
||||||
<Link
|
|
||||||
href="/docs/reference/installation-architecture"
|
|
||||||
className={cn(buttonVariants(), "not-prose")}
|
|
||||||
>
|
|
||||||
View the installation architecture
|
|
||||||
</Link>
|
|
||||||
<Link
|
|
||||||
href="https://github.com/dathere/ckan-devstaller"
|
|
||||||
className={cn(buttonVariants({ variant: "ghost" }))}
|
|
||||||
>
|
|
||||||
Source code
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</WhyPanel>
|
|
||||||
) : null}
|
|
||||||
{active === 3 ? (
|
|
||||||
<WhyPanel>
|
|
||||||
<h3>
|
|
||||||
<Trash2Icon className="w-4 h-4 inline-block mr-1 mb-1" />
|
|
||||||
Uninstall CKAN with ease.
|
|
||||||
</h3>
|
|
||||||
<p>
|
|
||||||
After you've installed CKAN with ckan-devstaller, you can
|
|
||||||
uninstall CKAN with ease. This allows for quickly re-installing
|
|
||||||
CKAN for a different use case.
|
|
||||||
</p>
|
|
||||||
{props.codeblockUninstall}
|
|
||||||
<Link
|
|
||||||
href="/docs/tutorials/uninstall-ckan"
|
|
||||||
className={cn(buttonVariants(), "not-prose")}
|
|
||||||
>
|
|
||||||
Learn more about uninstalling
|
|
||||||
</Link>
|
|
||||||
</WhyPanel>
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function WhyPanel(props: HTMLProps<HTMLDivElement>) {
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
{...props}
|
|
||||||
className={cn(
|
|
||||||
"duration-700 animate-in fade-in text-sm prose",
|
|
||||||
props.className,
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
{props.children}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ The [Quick Start](/docs) page now includes three options for suggested installat
|
||||||
|
|
||||||
## Installation architecture page
|
## Installation architecture page
|
||||||
|
|
||||||
There is now an [Installation Architecture](/docs/reference/installation-architecture) page in the Reference section of the web app that provides a visual representation of where `ckan-devstaller` installs relevant files/folders.
|
There is now an [Installation Architecture](/docs/reference/installation-architecture) page in the Reference section of the web app that provides a visual representaion of where `ckan-devstaller` installs relevant files/folders.
|
||||||
|
|
||||||
## Uninstall CKAN page
|
## Uninstall CKAN page
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,6 @@
|
||||||
"---Further reading---",
|
"---Further reading---",
|
||||||
"tutorials",
|
"tutorials",
|
||||||
"reference",
|
"reference",
|
||||||
"changelog",
|
"changelog"
|
||||||
"--- ---",
|
|
||||||
"[Privacy Policy](https://dathere.com/privacy-policy/)"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue