chore: prepare repository migration and Docker Build Cloud publishing

This commit is contained in:
Amruth Pillai
2026-09-11 02:55:52 +02:00
parent d9fdf7a30a
commit 31d6ee6251
40 changed files with 113 additions and 92 deletions
+2 -2
View File
@@ -20,8 +20,8 @@
"url": "https://rxresu.me"
},
"repositoryUrl": {
"url": "https://github.com/amruthpillai/reactive-resume",
"wellKnown": "https://github.com/amruthpillai/reactive-resume/blob/main/.github/.well-known/funding-manifest-urls"
"url": "https://github.com/reactive-resume/app",
"wellKnown": "https://github.com/reactive-resume/app/blob/main/.github/.well-known/funding-manifest-urls"
},
"licenses": ["spdx:MIT"],
"tags": ["data", "design", "productivity", "resume-builder"]
+2 -2
View File
@@ -1,8 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Questions and support
url: https://github.com/amruthpillai/reactive-resume/discussions/categories/q-a
url: https://github.com/reactive-resume/app/discussions/categories/q-a
about: Get help with setup, configuration, and using Reactive Resume.
- name: Security vulnerability
url: https://github.com/amruthpillai/reactive-resume/security/advisories/new
url: https://github.com/reactive-resume/app/security/advisories/new
about: Report security vulnerabilities privately.
+21 -19
View File
@@ -13,7 +13,8 @@ concurrency:
cancel-in-progress: true
env:
IMAGE: ${{ github.repository }}
DOCKERHUB_IMAGE: amruthpillai/reactive-resume
GHCR_IMAGE: ${{ github.repository }}
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
@@ -59,15 +60,18 @@ jobs:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Login to Docker Hub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Setup Docker Build Cloud
uses: docker/setup-buildx-action@v4
with:
driver: cloud
endpoint: amruthpillai/default
- name: Login to GitHub Container Registry
uses: docker/login-action@v4
with:
@@ -80,8 +84,8 @@ jobs:
uses: docker/metadata-action@v6
with:
images: |
ghcr.io/${{ env.IMAGE }}
docker.io/${{ env.IMAGE }}
ghcr.io/${{ env.GHCR_IMAGE }}
docker.io/${{ env.DOCKERHUB_IMAGE }}
tags: |
type=sha,prefix=sha-,suffix=-${{ matrix.arch }}
@@ -97,8 +101,6 @@ jobs:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
annotations: ${{ steps.meta.outputs.annotations }}
cache-from: type=gha,scope=${{ env.IMAGE }}-${{ matrix.arch }}
cache-to: type=gha,mode=max,scope=${{ env.IMAGE }}-${{ matrix.arch }}
- name: Export digest
run: |
@@ -176,8 +178,8 @@ jobs:
uses: docker/metadata-action@v6
with:
images: |
ghcr.io/${{ env.IMAGE }}
docker.io/${{ env.IMAGE }}
ghcr.io/${{ env.GHCR_IMAGE }}
docker.io/${{ env.DOCKERHUB_IMAGE }}
tags: |
type=sha,prefix=sha-
type=raw,value=nightly,enable=${{ needs.mode.outputs.nightly == 'true' }}
@@ -207,14 +209,14 @@ jobs:
--annotation "index:org.opencontainers.image.vendor=Amruth Pillai" \
--annotation "index:org.opencontainers.image.url=https://rxresu.me" \
--annotation "index:org.opencontainers.image.documentation=https://docs.rxresu.me" \
--annotation "index:org.opencontainers.image.source=https://github.com/amruthpillai/reactive-resume" \
--annotation "index:org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}" \
--annotation "index:org.opencontainers.image.version=${{ steps.version.outputs.version }}" \
$(printf 'ghcr.io/${{ env.IMAGE }}@sha256:%s ' *) \
$(printf 'docker.io/${{ env.IMAGE }}@sha256:%s ' *)
$(printf 'ghcr.io/${{ env.GHCR_IMAGE }}@sha256:%s ' *) \
$(printf 'docker.io/${{ env.DOCKERHUB_IMAGE }}@sha256:%s ' *)
# Get the digest of the multi-arch manifest
GHCR_DIGEST=$(docker buildx imagetools inspect ghcr.io/${{ env.IMAGE }}:${FINAL_TAG} --format '{{json .Manifest.Digest}}' | tr -d '"')
DOCKER_DIGEST=$(docker buildx imagetools inspect docker.io/${{ env.IMAGE }}:${FINAL_TAG} --format '{{json .Manifest.Digest}}' | tr -d '"')
GHCR_DIGEST=$(docker buildx imagetools inspect ghcr.io/${{ env.GHCR_IMAGE }}:${FINAL_TAG} --format '{{json .Manifest.Digest}}' | tr -d '"')
DOCKER_DIGEST=$(docker buildx imagetools inspect docker.io/${{ env.DOCKERHUB_IMAGE }}:${FINAL_TAG} --format '{{json .Manifest.Digest}}' | tr -d '"')
echo "final_tag=$FINAL_TAG" >> "$GITHUB_OUTPUT"
echo "ghcr_digest=$GHCR_DIGEST" >> "$GITHUB_OUTPUT"
echo "docker_digest=$DOCKER_DIGEST" >> "$GITHUB_OUTPUT"
@@ -225,15 +227,15 @@ jobs:
- name: Sign images with Cosign
run: |
# Sign GHCR image
cosign sign --yes ghcr.io/${{ env.IMAGE }}@${{ steps.manifest.outputs.ghcr_digest }}
cosign sign --yes ghcr.io/${{ env.GHCR_IMAGE }}@${{ steps.manifest.outputs.ghcr_digest }}
# Sign Docker Hub image
cosign sign --yes docker.io/${{ env.IMAGE }}@${{ steps.manifest.outputs.docker_digest }}
cosign sign --yes docker.io/${{ env.DOCKERHUB_IMAGE }}@${{ steps.manifest.outputs.docker_digest }}
- name: Inspect image
run: |
docker buildx imagetools inspect ghcr.io/${{ env.IMAGE }}:${{ steps.manifest.outputs.final_tag }}
docker buildx imagetools inspect docker.io/${{ env.IMAGE }}:${{ steps.manifest.outputs.final_tag }}
docker buildx imagetools inspect ghcr.io/${{ env.GHCR_IMAGE }}:${{ steps.manifest.outputs.final_tag }}
docker buildx imagetools inspect docker.io/${{ env.DOCKERHUB_IMAGE }}:${{ steps.manifest.outputs.final_tag }}
- name: Redeploy Stack
if: ${{ needs.mode.outputs.release == 'true' }}
+1 -1
View File
@@ -31,7 +31,7 @@ Boundaries: code/commits/PRs written normal.
## Agent skills
- Issues and specs: GitHub Issues for `amruthpillai/reactive-resume`. See `docs/agents/issue-tracker.md`.
- Issues and specs: GitHub Issues for `reactive-resume/app`. See `docs/agents/issue-tracker.md`.
- Domain docs use a multi-context layout. See `docs/agents/domain.md`.
## Overview
+1 -1
View File
@@ -48,7 +48,7 @@ LABEL org.opencontainers.image.description="A free and open-source resume builde
LABEL org.opencontainers.image.vendor="Amruth Pillai"
LABEL org.opencontainers.image.url="https://rxresu.me"
LABEL org.opencontainers.image.documentation="https://docs.rxresu.me"
LABEL org.opencontainers.image.source="https://github.com/amruthpillai/reactive-resume"
LABEL org.opencontainers.image.source="https://github.com/reactive-resume/app"
ENV NODE_ENV="production" \
PORT=3000 \
+12 -12
View File
@@ -20,9 +20,9 @@
</p>
<p>
<img src="https://img.shields.io/github/package-json/v/amruthpillai/reactive-resume?style=flat-square" alt="Reactive Resume Version">
<img src="https://img.shields.io/github/stars/amruthpillai/Reactive-Resume?style=flat-square" alt="GitHub Stars">
<img src="https://img.shields.io/github/license/amruthpillai/Reactive-Resume?style=flat-square" alt="License" />
<img src="https://img.shields.io/github/package-json/v/reactive-resume/app?style=flat-square" alt="Reactive Resume Version">
<img src="https://img.shields.io/github/stars/reactive-resume/app?style=flat-square" alt="GitHub Stars">
<img src="https://img.shields.io/github/license/reactive-resume/app?style=flat-square" alt="License" />
<img src="https://img.shields.io/docker/pulls/amruthpillai/reactive-resume?style=flat-square" alt="Docker Pulls" />
<a href="https://discord.gg/aSyA5ZSxpb"><img src="https://img.shields.io/discord/1173518977851473940?style=flat-square&label=discord" alt="Discord" /></a>
<a href="https://crowdin.com/project/reactive-resume"><img src="https://badges.crowdin.net/reactive-resume/localized.svg?style=flat-square" alt="Crowdin" /></a>
@@ -149,7 +149,7 @@ The quickest way to run Reactive Resume locally:
```bash
# Clone the repository
git clone --depth=1 https://github.com/amruthpillai/reactive-resume.git
git clone --depth=1 https://github.com/reactive-resume/app.git reactive-resume
cd reactive-resume
# Start all services
@@ -202,8 +202,8 @@ Pull the latest image from Docker Hub or GitHub Container Registry:
# Docker Hub
docker pull amruthpillai/reactive-resume:latest
# GitHub Container Registry
docker pull ghcr.io/amruthpillai/reactive-resume:latest
# GitHub Container Registry (after migration availability is confirmed)
docker pull ghcr.io/reactive-resume/app:latest
```
See the [self-hosting guide](https://docs.rxresu.me/self-hosting/docker) for complete instructions.
@@ -225,17 +225,17 @@ Other ways to support:
- Star this repository
- Report reproducible bugs and suggest actionable features
- Help other users in [GitHub Discussions](https://github.com/amruthpillai/reactive-resume/discussions/categories/q-a)
- Help other users in [GitHub Discussions](https://github.com/reactive-resume/app/discussions/categories/q-a)
- Improve documentation
- Help with translations
## Star History
<a href="https://www.star-history.com/?repos=amruthpillai%2Freactive-resume&type=date&legend=top-left">
<a href="https://www.star-history.com/?repos=reactive-resume/app&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=amruthpillai/reactive-resume&type=date&theme=dark&legend=top-left&sealed_token=QmaOn4Ech499R6kpQe8ONn911UjGUaJfQBT0MXlQLU9hTo-Ie7lTxIILWbBvmtzDGHk7ziWKN_N5iM5mgP8widn_FGHd9-PHNokPtSji8XLgbFpqatgyqIDPnOys-IhO40W3J0HeH07FL-Q8Bq6ArRk3LDtJDwjh4m0ya-2L59ULb7BaqxkSDuCytkCr" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=amruthpillai/reactive-resume&type=date&legend=top-left&sealed_token=QmaOn4Ech499R6kpQe8ONn911UjGUaJfQBT0MXlQLU9hTo-Ie7lTxIILWbBvmtzDGHk7ziWKN_N5iM5mgP8widn_FGHd9-PHNokPtSji8XLgbFpqatgyqIDPnOys-IhO40W3J0HeH07FL-Q8Bq6ArRk3LDtJDwjh4m0ya-2L59ULb7BaqxkSDuCytkCr" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=amruthpillai/reactive-resume&type=date&legend=top-left&sealed_token=QmaOn4Ech499R6kpQe8ONn911UjGUaJfQBT0MXlQLU9hTo-Ie7lTxIILWbBvmtzDGHk7ziWKN_N5iM5mgP8widn_FGHd9-PHNokPtSji8XLgbFpqatgyqIDPnOys-IhO40W3J0HeH07FL-Q8Bq6ArRk3LDtJDwjh4m0ya-2L59ULb7BaqxkSDuCytkCr" />
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=reactive-resume/app&type=date&theme=dark&legend=top-left&sealed_token=QmaOn4Ech499R6kpQe8ONn911UjGUaJfQBT0MXlQLU9hTo-Ie7lTxIILWbBvmtzDGHk7ziWKN_N5iM5mgP8widn_FGHd9-PHNokPtSji8XLgbFpqatgyqIDPnOys-IhO40W3J0HeH07FL-Q8Bq6ArRk3LDtJDwjh4m0ya-2L59ULb7BaqxkSDuCytkCr" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=reactive-resume/app&type=date&legend=top-left&sealed_token=QmaOn4Ech499R6kpQe8ONn911UjGUaJfQBT0MXlQLU9hTo-Ie7lTxIILWbBvmtzDGHk7ziWKN_N5iM5mgP8widn_FGHd9-PHNokPtSji8XLgbFpqatgyqIDPnOys-IhO40W3J0HeH07FL-Q8Bq6ArRk3LDtJDwjh4m0ya-2L59ULb7BaqxkSDuCytkCr" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=reactive-resume/app&type=date&legend=top-left&sealed_token=QmaOn4Ech499R6kpQe8ONn911UjGUaJfQBT0MXlQLU9hTo-Ie7lTxIILWbBvmtzDGHk7ziWKN_N5iM5mgP8widn_FGHd9-PHNokPtSji8XLgbFpqatgyqIDPnOys-IhO40W3J0HeH07FL-Q8Bq6ArRk3LDtJDwjh4m0ya-2L59ULb7BaqxkSDuCytkCr" />
</picture>
</a>
@@ -251,7 +251,7 @@ Every contribution helps, whether it is a typo fix or a new feature.
See the [development setup guide](https://docs.rxresu.me/contributing/development) for how to run the project locally.
Maintainers review the [`status: needs triage` queue](https://github.com/amruthpillai/reactive-resume/issues?q=is%3Aissue+is%3Aopen+label%3A%22status%3A+needs+triage%22)
Maintainers review the [`status: needs triage` queue](https://github.com/reactive-resume/app/issues?q=is%3Aissue+is%3Aopen+label%3A%22status%3A+needs+triage%22)
weekly. Triaged bugs become `status: confirmed`; feature proposals become `status: accepted`; reports that need details become
`status: needs info`.
+1 -1
View File
@@ -84,7 +84,7 @@ export async function generateOpenApiSpec({ appUrl, version }: GenerateOpenApiSp
title: "Reactive Resume",
version,
description: "Reactive Resume API",
license: { name: "MIT", url: "https://github.com/amruthpillai/reactive-resume/blob/main/LICENSE" },
license: { name: "MIT", url: "https://github.com/reactive-resume/app/blob/main/LICENSE" },
contact: { name: "Amruth Pillai", email: "hello@amruthpillai.com", url: "https://amruthpillai.com" },
},
servers: [{ url: `${appUrl}/api/openapi` }],
+2 -2
View File
@@ -127,13 +127,13 @@ function createRootSeoMarkup(canonicalUrl: string) {
price: "0",
priceCurrency: "USD",
},
codeRepository: "https://github.com/amruthpillai/reactive-resume",
codeRepository: "https://github.com/reactive-resume/app",
},
{
"@type": "Project",
name: "Reactive Resume",
url: canonicalUrl,
sameAs: ["https://github.com/amruthpillai/reactive-resume"],
sameAs: ["https://github.com/reactive-resume/app"],
},
{
"@type": "FAQPage",
+2 -2
View File
@@ -20,8 +20,8 @@
"url": "https://rxresu.me"
},
"repositoryUrl": {
"url": "https://github.com/amruthpillai/reactive-resume",
"wellKnown": "https://github.com/amruthpillai/reactive-resume/blob/main/.github/.well-known/funding-manifest-urls"
"url": "https://github.com/reactive-resume/app",
"wellKnown": "https://github.com/reactive-resume/app/blob/main/.github/.well-known/funding-manifest-urls"
},
"licenses": ["spdx:MIT"],
"tags": ["data", "design", "productivity", "resume-builder"]
@@ -42,7 +42,7 @@ describe("GithubStarsButton", () => {
it("renders an anchor pointing at the project repo with rel=noopener noreferrer and target=_blank", () => {
renderButton();
const link = screen.getByRole("button") as HTMLAnchorElement;
expect(link.href).toBe("https://github.com/amruthpillai/reactive-resume");
expect(link.href).toBe("https://github.com/reactive-resume/app");
expect(link.target).toBe("_blank");
expect(link.rel).toBe("noopener noreferrer");
});
@@ -20,7 +20,7 @@ export function GithubStarsButton() {
render={
<a
target="_blank"
href="https://github.com/amruthpillai/reactive-resume"
href="https://github.com/reactive-resume/app"
aria-label={ariaLabel}
rel="noopener noreferrer"
>
@@ -24,7 +24,7 @@ describe("Copyright", () => {
it("renders the MIT license link", () => {
renderCopyright();
const link = screen.getByRole("link", { name: "MIT" });
expect(link.getAttribute("href")).toBe("https://github.com/AmruthPillai/Reactive-Resume/blob/main/LICENSE");
expect(link.getAttribute("href")).toBe("https://github.com/reactive-resume/app/blob/main/LICENSE");
expect(link.getAttribute("rel")).toBe("noopener noreferrer");
});
+1 -1
View File
@@ -10,7 +10,7 @@ export function Copyright({ className, ...props }: Props) {
<Trans>
Licensed under{" "}
<a
href="https://github.com/AmruthPillai/Reactive-Resume/blob/main/LICENSE"
href="https://github.com/reactive-resume/app/blob/main/LICENSE"
target="_blank"
rel="noopener noreferrer"
className="font-medium underline underline-offset-2"
+1 -1
View File
@@ -21,7 +21,7 @@ import "./styles.css";
const ExportPlayground = lazy(() => import("./export-playground"));
const AtsPlayground = lazy(() => import("./ats-playground"));
const githubUrl = "https://github.com/amruthpillai/reactive-resume";
const githubUrl = "https://github.com/reactive-resume/app";
const buttonClass =
"inline-flex min-h-[52px] items-center justify-center gap-3 rounded-[4px] border border-[#f1f0eb] bg-[#f1f0eb] px-[19px] py-[14px] text-[14px] font-[550] text-[#151516] [transition:background-color_150ms_ease,transform_150ms_cubic-bezier(0.23,1,0.32,1)] hover:bg-[#d9d8d2] active:transform-[scale(0.97)] max-[540px]:min-h-[49px] max-[540px]:gap-[18px] max-[540px]:px-[15px] max-[540px]:py-3 max-[540px]:text-[13px]";
const brandClass = "inline-flex shrink-0 items-center gap-[11px] font-[550] tracking-[-0.04em] max-[540px]:gap-2";
@@ -14,7 +14,7 @@ import { m } from "motion/react";
import { cn } from "@reactive-resume/utils/style";
import { wrap } from "./classes";
const githubUrl = "https://github.com/amruthpillai/reactive-resume";
const githubUrl = "https://github.com/reactive-resume/app";
const licenseUrl = `${githubUrl}/blob/main/LICENSE`;
type FooterLink = { label: string } & (
+1 -1
View File
@@ -1,6 +1,6 @@
const productionRootUrl = "https://rxresu.me/";
const appName = "Reactive Resume";
const repositoryUrl = "https://github.com/amruthpillai/reactive-resume";
const repositoryUrl = "https://github.com/reactive-resume/app";
type JsonLd = Record<string, unknown>;
@@ -47,7 +47,7 @@ describe("Footer", () => {
it("renders social media icon links to GitHub, LinkedIn, and X", () => {
const { container } = renderFooter();
const hrefs = Array.from(container.querySelectorAll<HTMLAnchorElement>("a")).map((a) => a.href);
expect(hrefs.some((h) => h.includes("github.com/amruthpillai/reactive-resume"))).toBe(true);
expect(hrefs.some((h) => h.includes("github.com/reactive-resume/app"))).toBe(true);
expect(hrefs.some((h) => h.includes("linkedin.com/in/amruthpillai"))).toBe(true);
expect(hrefs.some((h) => h.includes("x.com/KingOKings"))).toBe(true);
});
@@ -27,19 +27,19 @@ type SocialLink = {
const getResourceLinks = (): FooterLinkItem[] => [
{ url: "https://docs.rxresu.me", label: t`Documentation` },
{ url: "https://opencollective.com/reactive-resume/donate", label: t`Sponsorships` },
{ url: "https://github.com/amruthpillai/reactive-resume", label: t`Source Code` },
{ url: "https://github.com/reactive-resume/app", label: t`Source Code` },
{ url: "https://docs.rxresu.me/changelog", label: t`Changelog` },
];
const getCommunityLinks = (): FooterLinkItem[] => [
{ url: "https://github.com/amruthpillai/reactive-resume/issues", label: t`Report an issue` },
{ url: "https://github.com/reactive-resume/app/issues", label: t`Report an issue` },
{ url: "https://crowdin.com/project/reactive-resume", label: t`Translations` },
{ url: "https://reddit.com/r/reactiveresume", label: t`Subreddit` },
{ url: "https://discord.gg/aSyA5ZSxpb", label: t`Discord` },
];
const socialLinks: SocialLink[] = [
{ url: "https://github.com/amruthpillai/reactive-resume", label: t`GitHub`, icon: GithubLogoIcon },
{ url: "https://github.com/reactive-resume/app", label: t`GitHub`, icon: GithubLogoIcon },
{ url: "https://linkedin.com/in/amruthpillai", label: t`LinkedIn`, icon: LinkedinLogoIcon },
{ url: "https://x.com/KingOKings", label: t`X (Twitter)`, icon: XLogoIcon },
];
@@ -59,7 +59,7 @@ export function InformationSectionBuilder() {
className="text-xs"
nativeButton={false}
render={
<a href="https://github.com/amruthpillai/reactive-resume" target="_blank" rel="noopener noreferrer">
<a href="https://github.com/reactive-resume/app" target="_blank" rel="noopener noreferrer">
<Trans>Source Code</Trans>
</a>
}
@@ -71,7 +71,7 @@ export function InformationSectionBuilder() {
className="text-xs"
nativeButton={false}
render={
<a href="https://github.com/amruthpillai/reactive-resume/issues" target="_blank" rel="noopener noreferrer">
<a href="https://github.com/reactive-resume/app/issues" target="_blank" rel="noopener noreferrer">
<Trans>Report a Bug</Trans>
</a>
}
+1 -1
View File
@@ -78,7 +78,7 @@ services:
condition: service_healthy
reactive_resume:
# image: ghcr.io/amruthpillai/reactive-resume:latest
# image: ghcr.io/reactive-resume/app:latest
build:
context: .
dockerfile: Dockerfile
+2 -2
View File
@@ -17,7 +17,7 @@ These steps set up Reactive Resume for local development, whether you're contrib
<Steps>
<Step title="Clone the Repository">
```bash
git clone https://github.com/amruthpillai/reactive-resume.git
git clone https://github.com/reactive-resume/app.git reactive-resume
cd reactive-resume
```
</Step>
@@ -318,7 +318,7 @@ pnpm run typecheck
<Card title="Project Architecture" icon="folder-open" href="/contributing/architecture">
How the project and codebase are structured.
</Card>
<Card title="GitHub Repository" icon="github" href="https://github.com/amruthpillai/reactive-resume">
<Card title="GitHub Repository" icon="github" href="https://github.com/reactive-resume/app">
View the source code and contribute to the project.
</Card>
</CardGroup>
+2 -2
View File
@@ -106,7 +106,7 @@ If your language is not listed in the Crowdin project, you can request it to be
To request a new language:
1. Go to the [GitHub Issues](https://github.com/amruthpillai/reactive-resume/issues) page
1. Go to the [GitHub Issues](https://github.com/reactive-resume/app/issues) page
2. Click **New Issue**
3. Select the appropriate template or create a blank issue
4. Title it something like: "Add [Language Name] to Reactive Resume"
@@ -152,7 +152,7 @@ Translations submitted on Crowdin are synced to the codebase periodically. Once
<Card icon="book-open" title="Crowdin Translator Docs" href="https://support.crowdin.com/for-translators/">
Official Crowdin documentation for translators.
</Card>
<Card icon="github" title="GitHub Issues" href="https://github.com/amruthpillai/reactive-resume/issues">
<Card icon="github" title="GitHub Issues" href="https://github.com/reactive-resume/app/issues">
Report issues or request new languages.
</Card>
</CardGroup>
+3 -3
View File
@@ -177,7 +177,7 @@
{
"icon": "github",
"anchor": "Source Code",
"href": "https://github.com/amruthpillai/reactive-resume"
"href": "https://github.com/reactive-resume/app"
}
]
}
@@ -190,7 +190,7 @@
"links": [
{
"label": "Support",
"href": "https://github.com/amruthpillai/reactive-resume/issues"
"href": "https://github.com/reactive-resume/app/issues"
}
],
"primary": {
@@ -205,7 +205,7 @@
"footer": {
"socials": {
"website": "https://rxresu.me",
"github": "https://github.com/amruthpillai/reactive-resume"
"github": "https://github.com/reactive-resume/app"
}
}
}
+4 -4
View File
@@ -35,7 +35,7 @@ Reactive Resume is a free and open-source resume builder that makes it easy to c
<AccordionGroup>
<Accordion title="Completely Free & Open Source" icon="code-branch">
Reactive Resume is licensed under MIT. You can use it for free, modify it, and even host your own instance. The
entire codebase is available on [GitHub](https://github.com/amruthpillai/reactive-resume).
entire codebase is available on [GitHub](https://github.com/reactive-resume/app).
</Accordion>
<Accordion title="Multiple Templates" icon="grid-2">
@@ -91,10 +91,10 @@ Use the hosted version, or run your own instance.
## Community & support
<CardGroup cols={2}>
<Card title="GitHub" icon="github" href="https://github.com/amruthpillai/reactive-resume">
<Card title="GitHub" icon="github" href="https://github.com/reactive-resume/app">
Star the repo, report reproducible bugs, propose features, and contribute to the project.
</Card>
<Card title="GitHub Discussions" icon="comments" href="https://github.com/amruthpillai/reactive-resume/discussions/categories/q-a">
<Card title="GitHub Discussions" icon="comments" href="https://github.com/reactive-resume/app/discussions/categories/q-a">
Ask questions about setup, configuration, and using Reactive Resume.
</Card>
<Card title="Reddit" icon="reddit" href="https://reddit.com/r/reactiveresume">
@@ -109,6 +109,6 @@ Use the hosted version, or run your own instance.
</CardGroup>
<Note>
**Need help?** Start a [GitHub Discussion](https://github.com/amruthpillai/reactive-resume/discussions/categories/q-a).
**Need help?** Start a [GitHub Discussion](https://github.com/reactive-resume/app/discussions/categories/q-a).
GitHub Issues are reserved for reproducible bugs and actionable feature proposals.
</Note>
+2 -2
View File
@@ -72,7 +72,7 @@ Before you begin, ensure you have the following installed:
<Steps>
<Step title="Clone the Repository">
```bash
git clone https://github.com/amruthpillai/reactive-resume.git
git clone https://github.com/reactive-resume/app.git reactive-resume
cd reactive-resume
```
</Step>
@@ -232,6 +232,6 @@ A complete list of the environment variables you can configure:
</CardGroup>
<Note>
**Having trouble?** Check our [GitHub Issues](https://github.com/amruthpillai/reactive-resume/issues) or reach out via
**Having trouble?** Check our [GitHub Issues](https://github.com/reactive-resume/app/issues) or reach out via
[email](mailto:hello@amruthpillai.com).
</Note>
@@ -77,4 +77,4 @@ problem. That requires a separate session, create, list, and reload diagnosis; a
## Questions or issues?
If you run into problems accessing v4, or have questions about migrating your resumes, open an issue on [GitHub](https://github.com/amruthpillai/reactive-resume/issues).
If you run into problems accessing v4, or have questions about migrating your resumes, open an issue on [GitHub](https://github.com/reactive-resume/app/issues).
+1 -1
View File
@@ -39,7 +39,7 @@ If the servers are under high load or unreachable:
</Step>
<Step title="Check for announcements">
For major outages or planned maintenance, announcements may be posted on our [GitHub repository](https://github.com/amruthpillai/reactive-resume).
For major outages or planned maintenance, announcements may be posted on our [GitHub repository](https://github.com/reactive-resume/app).
</Step>
</Steps>
+1 -1
View File
@@ -9,7 +9,7 @@ Reactive Resume is open-source software. The project is published under the **MI
If you are running a modified/self-hosted instance, you may have additional notices or third-party licenses that apply (for example, fonts, icons, or other bundled assets).
For the upstream repository, see: [amruthpillai/reactive-resume](https://github.com/amruthpillai/reactive-resume)
For the upstream repository, see: [reactive-resume/app](https://github.com/reactive-resume/app)
---
+22 -4
View File
@@ -3,6 +3,13 @@ title: "Self-hosting with Docker"
description: "How to self-host Reactive Resume with Docker (Postgres only), with an environment variable reference and troubleshooting tips."
---
<Warning>
**Repository migration planned.** The GitHub repository is moving to `reactive-resume/app`.
Docker Hub stays at `amruthpillai/reactive-resume`; GHCR is moving to `ghcr.io/reactive-resume/app`.
The GHCR examples below use the new address. Keep your current image configuration until the
[pinned migration announcement](https://github.com/amruthpillai/reactive-resume/issues/3503) confirms availability.
</Warning>
<Info>
**From v5.1.0 onwards** — PDF generation now runs entirely client-side via `@react-pdf/renderer`. New deployments no longer require Browserless, Chromium, or any external print service as a dependency. The `PRINTER_*` and `BROWSERLESS_*` environment variables are no longer read and can be removed from your `.env`.
</Info>
@@ -28,7 +35,18 @@ planned. Follow the [Docker Compose quickstart](#quickstart-using-docker-compose
You can pull the latest app image from:
- Docker Hub: `amruthpillai/reactive-resume:latest`
- GitHub Container Registry: `ghcr.io/amruthpillai/reactive-resume:latest`
- GitHub Container Registry: `ghcr.io/reactive-resume/app:latest`
### Switching an existing GHCR installation
After the new GHCR image is confirmed available, replace `ghcr.io/amruthpillai/reactive-resume` with
`ghcr.io/reactive-resume/app` in your deployment configuration. Keep your current version tag only if that tag
exists at the new address. Historical tags are not copied automatically, and the old GHCR address does not redirect.
Docker Hub users need no image-name change. Changing registries does not require deleting containers' persistent
volumes, resetting the database, or migrating resumes. Normal upgrade instructions still apply if you also change
the application version. If you verify image signatures, update the accepted workflow identity for new releases
to the workflow under `reactive-resume/app`; retain the old identity when verifying historical releases.
## Minimum requirements
@@ -191,7 +209,7 @@ services:
reactive-resume:
image: amruthpillai/reactive-resume:latest
# image: ghcr.io/amruthpillai/reactive-resume:latest
# image: ghcr.io/reactive-resume/app:latest
restart: unless-stopped
ports:
- "3000:3000"
@@ -216,7 +234,7 @@ volumes:
</CodeGroup>
<Tip>
Prefer pulling from Docker Hub? Keep <code>amruthpillai/reactive-resume:latest</code>. Prefer GHCR? Swap it to <code>ghcr.io/amruthpillai/reactive-resume:latest</code>.
Prefer pulling from Docker Hub? Keep <code>amruthpillai/reactive-resume:latest</code>. Prefer GHCR? Swap it to <code>ghcr.io/reactive-resume/app:latest</code>.
</Tip>
<Note>
@@ -254,7 +272,7 @@ docker compose logs -f reactive-resume
Use your platform's generic container configuration to create two separately managed containers: one for Reactive
Resume and one for PostgreSQL. No official Unraid Community Applications template is provided.
- Use the official `amruthpillai/reactive-resume:latest` or `ghcr.io/amruthpillai/reactive-resume:latest` image for the
- Use the official `amruthpillai/reactive-resume:latest` or `ghcr.io/reactive-resume/app:latest` image for the
app container.
- Map the app's container port `3000` to the host port you want to use.
- Connect both containers to a private container network. Set the host in `DATABASE_URL` to the PostgreSQL container or
+4 -3
View File
@@ -15,7 +15,7 @@ They go further than the basic setup in the [Self-hosting with Docker](/self-hos
<Info>
**Share your setup.** If you have a working configuration that isn't covered here, I'd love to include it. [Open a
pull request](https://github.com/amruthpillai/reactive-resume) with your example added to this page.
pull request](https://github.com/reactive-resume/app) with your example added to this page.
</Info>
---
@@ -352,7 +352,8 @@ services:
replicas: 1
reactive_resume:
image: ghcr.io/amruthpillai/reactive-resume:latest
# Wait for the migration announcement to confirm this GHCR address is available.
image: ghcr.io/reactive-resume/app:latest
networks:
- traefik_network
- reactive_resume_network
@@ -457,7 +458,7 @@ Have a different deployment setup that works well? Consider contributing it here
- Podman configurations
- Cloud-specific deployments (AWS ECS, Google Cloud Run, Azure Container Apps)
To contribute, [open a pull request](https://github.com/amruthpillai/reactive-resume) with your example added to this page. Include:
To contribute, [open a pull request](https://github.com/reactive-resume/app) with your example added to this page. Include:
1. A brief description of when/why someone would use this setup
2. The complete Docker Compose (or equivalent) configuration
+1 -1
View File
@@ -150,7 +150,7 @@ To run the migration scripts, you need the following installed on your host mach
<Card title="Reactive Resume Source Code">
Clone the Reactive Resume repository and check out the last tag that includes the migration scripts:
```bash
git clone https://github.com/amruthpillai/reactive-resume.git
git clone https://github.com/reactive-resume/app.git reactive-resume
cd reactive-resume
git checkout tags/v5.0.20
pnpm install
+1 -1
View File
@@ -5,7 +5,7 @@
"description": "Reactive Resume API",
"license": {
"name": "MIT",
"url": "https://github.com/amruthpillai/reactive-resume/blob/main/LICENSE"
"url": "https://github.com/reactive-resume/app/blob/main/LICENSE"
},
"contact": {
"name": "Amruth Pillai",
+1 -1
View File
@@ -50,7 +50,7 @@ Open [rxresu.me](https://rxresu.me) to create a resume, or follow [Creating your
<Card title="Use the hosted app" icon="rocket" href="https://rxresu.me">
Open the official Reactive Resume instance.
</Card>
<Card title="Source code" icon="github" href="https://github.com/amruthpillai/reactive-resume">
<Card title="Source code" icon="github" href="https://github.com/reactive-resume/app">
View the project repository.
</Card>
<Card title="License" icon="scale-balanced" href="/legal/license">
@@ -7,7 +7,7 @@ Reactive Resume is an open-source resume builder. The source code is public, the
## What open source means here
The project repository is on [GitHub](https://github.com/amruthpillai/reactive-resume). You can read the code, report issues, contribute improvements, and see how the builder, the API, the self-hosting setup, and the documentation are put together.
The project repository is on [GitHub](https://github.com/reactive-resume/app). You can read the code, report issues, contribute improvements, and see how the builder, the API, the self-hosting setup, and the documentation are put together.
The license is documented in [License](/legal/license).
@@ -44,7 +44,7 @@ To contribute or to understand the codebase, start with the contributor docs. Th
<Card title="Translations" icon="language" href="/contributing/translations">
Help translate the app.
</Card>
<Card title="GitHub repository" icon="github" href="https://github.com/amruthpillai/reactive-resume">
<Card title="GitHub repository" icon="github" href="https://github.com/reactive-resume/app">
Browse issues, pull requests, and source code.
</Card>
</CardGroup>
@@ -21,7 +21,7 @@ Do not treat public sharing as access control. Use password protection, or keep
## Open source and self-hosting
The source code is on [GitHub](https://github.com/amruthpillai/reactive-resume), so you can read how the application works. If you need direct control over infrastructure, storage, auth providers, and deployment policy, run your own instance.
The source code is on [GitHub](https://github.com/reactive-resume/app), so you can read how the application works. If you need direct control over infrastructure, storage, auth providers, and deployment policy, run your own instance.
Start with:
+1 -1
View File
@@ -11,7 +11,7 @@
},
"repository": {
"type": "git",
"url": "https://github.com/amruthpillai/reactive-resume.git"
"url": "https://github.com/reactive-resume/app.git"
},
"engines": {
"node": ">=24"
@@ -3,7 +3,7 @@ import { db } from "@reactive-resume/db/client";
import * as schema from "@reactive-resume/db/schema";
const CACHE_DURATION_MS = 6 * 60 * 60 * 1000; // 6 hours
const GITHUB_API_URL = "https://api.github.com/repos/amruthpillai/reactive-resume";
const GITHUB_API_URL = "https://api.github.com/repos/reactive-resume/app";
const GITHUB_REQUEST_TIMEOUT_MS = 5_000;
const GITHUB_REQUEST_MAX_ATTEMPTS = 2;
+1 -1
View File
@@ -48,7 +48,7 @@ You could wire the bridge yourself with a raw `@deepseek-ai/dsh-mcp-client` row.
## Development
This package lives in the [Reactive Resume monorepo](https://github.com/amruthpillai/reactive-resume) at `packages/dsh-plugin`, next to `packages/mcp` — the server it bridges. `src/tool-names.test.ts` checks every tool the prompt guide names against `@reactive-resume/mcp/tool-names`, so renaming a tool breaks this package in the same pull request.
This package lives in the [Reactive Resume monorepo](https://github.com/reactive-resume/app) at `packages/dsh-plugin`, next to `packages/mcp` — the server it bridges. `src/tool-names.test.ts` checks every tool the prompt guide names against `@reactive-resume/mcp/tool-names`, so renaming a tool breaks this package in the same pull request.
```bash
pnpm --filter dsh-plugin-reactive-resume test
+3 -3
View File
@@ -13,12 +13,12 @@
"author": "Amruth Pillai",
"repository": {
"type": "git",
"url": "git+https://github.com/amruthpillai/reactive-resume.git",
"url": "git+https://github.com/reactive-resume/app.git",
"directory": "packages/dsh-plugin"
},
"homepage": "https://github.com/amruthpillai/reactive-resume/tree/main/packages/dsh-plugin#readme",
"homepage": "https://github.com/reactive-resume/app/tree/main/packages/dsh-plugin#readme",
"bugs": {
"url": "https://github.com/amruthpillai/reactive-resume/issues"
"url": "https://github.com/reactive-resume/app/issues"
},
"type": "module",
"main": "dist/index.js",
+1 -1
View File
@@ -5,7 +5,7 @@
"description": "Free open-source resume builder with remote MCP tools for resumes and job applications.",
"websiteUrl": "https://rxresu.me",
"repository": {
"url": "https://github.com/amruthpillai/reactive-resume",
"url": "https://github.com/reactive-resume/app",
"source": "github"
},
"version": "5.2.2",