diff --git a/packages/frontend/src/pages/Setup.tsx b/packages/frontend/src/pages/Setup.tsx
index f4d4173..ff7b371 100644
--- a/packages/frontend/src/pages/Setup.tsx
+++ b/packages/frontend/src/pages/Setup.tsx
@@ -5,7 +5,7 @@ import { api } from "../services/api";
const STEP_NAMES = [
"Welcome",
"Prerequisites",
- "GitHub PAT",
+ "Gitea Token",
"Workspace",
"NWN Home",
"Fork Repos",
@@ -118,7 +118,7 @@ function WelcomeStep({ onNext }: StepProps) {
Welcome to Layonara Forge
- This wizard will walk you through setting up your local NWN development environment — Docker, GitHub
+ This wizard will walk you through setting up your local NWN development environment — Docker, Gitea
access, workspace initialization, repository cloning, and database seeding.
@@ -183,8 +183,8 @@ function PrerequisitesStep({ onNext, onBack }: StepProps) {
);
}
-function GitHubPatStep({ onNext, onBack }: StepProps) {
- const [pat, setPat] = useState("");
+function GiteaTokenStep({ onNext, onBack }: StepProps) {
+ const [token, setToken] = useState("");
const [username, setUsername] = useState("");
const [error, setError] = useState("");
const [loading, setLoading] = useState(false);
@@ -193,9 +193,9 @@ function GitHubPatStep({ onNext, onBack }: StepProps) {
setLoading(true);
setError("");
try {
- const { login } = await api.github.validatePat(pat);
+ const { login } = await api.github.validatePat(token);
setUsername(login);
- await api.workspace.updateConfig({ githubPat: pat });
+ await api.workspace.updateConfig({ githubPat: token });
} catch (err) {
setError(err instanceof Error ? err.message : "Validation failed");
} finally {
@@ -206,17 +206,25 @@ function GitHubPatStep({ onNext, onBack }: StepProps) {
return (
- GitHub Personal Access Token
+ Gitea Access Token
- A PAT with repo scope is needed to fork and push to Layonara repositories.
+ A Gitea token is needed to fork and push to Layonara repositories. Generate one at{" "}
+
+ gitea.layonara.com/user/settings/applications
+
setPat(e.target.value)}
- placeholder="ghp_..."
+ value={token}
+ onChange={(e) => setToken(e.target.value)}
+ placeholder="Enter your Gitea token"
className="flex-1 rounded px-3 py-2 text-sm"
style={{
backgroundColor: "var(--forge-bg)",
@@ -226,7 +234,7 @@ function GitHubPatStep({ onNext, onBack }: StepProps) {
/>
@@ -328,7 +336,7 @@ function NwnHomeStep({ onNext, onBack }: StepProps) {
}
function ForkReposStep({ onNext, onBack }: StepProps) {
- const repos = ["nwn-module", "nwn-haks", "unified"];
+ const forkableRepos = ["nwn-module", "nwn-haks"];
const [forkStatus, setForkStatus] = useState>({});
const [errors, setErrors] = useState>({});
@@ -361,10 +369,10 @@ function ForkReposStep({ onNext, onBack }: StepProps) {
Fork Repositories
- Fork the Layonara repositories to your GitHub account.
+ Fork the Layonara repositories to your Gitea account.
- {repos.map((repo) => (
+ {forkableRepos.map((repo) => (
- Layonara/{repo}
+ layonara/{repo}
{errors[repo] && (
@@ -394,6 +402,22 @@ function ForkReposStep({ onNext, onBack }: StepProps) {
))}
+
+
+
+ plenarius/unified
+
+
+ Read-only from GitHub (no fork needed)
+
+
+
+ Read-only
+
+
@@ -430,7 +454,8 @@ function CloneReposStep({ onNext, onBack }: StepProps) {
Clone Repositories
- Clone all forked repositories into the workspace.
+ Clone all repositories into the workspace. Gitea repos clone from your fork; unified clones directly from
+ GitHub (public, read-only).
{repos.map((repo) => (
@@ -447,6 +472,11 @@ function CloneReposStep({ onNext, onBack }: StepProps) {
{repo}
+ {repo === "unified" && (
+
+ (GitHub, read-only)
+
+ )}
{errors[repo] && (
{errors[repo]}
@@ -665,7 +695,7 @@ export function Setup() {
const stepComponents = [
,
,
- ,
+ ,
,
,
,