feat(rebrand): DocAdenice — patch initial sur le fork Acadenice
- Renomme app name visible 'Docmost' -> 'DocAdenice' (browser title, header, emails) - Conserve identifiants techniques (package name, classes, imports, service docker) - Ajoute ACADENICE_PATCHES.md avec changelog des patches Acadenice
This commit is contained in:
parent
2b63137217
commit
efa26440a0
12 changed files with 95 additions and 15 deletions
72
ACADENICE_PATCHES.md
Normal file
72
ACADENICE_PATCHES.md
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
# Acadenice Patches
|
||||
|
||||
Liste des patches custom appliques sur le fork Acadenice de Docmost.
|
||||
Ce document est maintenu manuellement pour faciliter le rebase upstream.
|
||||
|
||||
Repo upstream : `github.com/docmost/docmost`
|
||||
Branche fork : `acadenice/main`
|
||||
|
||||
## Conventions
|
||||
|
||||
- Chaque patch est commit isole avec scope `feat(rebrand)` / `feat(custom)` / etc.
|
||||
- Les modifications in-line de fichiers upstream sont documentees ici avec rationale.
|
||||
- Les nouveaux fichiers (extensions Tiptap custom, hooks, etc.) vont dans des emplacements dedies pour minimiser les conflits de rebase.
|
||||
|
||||
---
|
||||
|
||||
## Patch 001 — Rebrand minimal "Docmost" -> "DocAdenice"
|
||||
|
||||
**Date** : 2026-05-07
|
||||
**Scope** : strings UI visibles utilisateur uniquement
|
||||
**Rationale** : nom temporaire pour les beta-testeurs en attendant le vrai rebranding (logo SVG + design system + manifest PWA). Conserve les identifiants techniques pour ne rien casser et faciliter le rebase upstream.
|
||||
|
||||
### Fichiers modifies
|
||||
|
||||
| Fichier | Avant | Apres |
|
||||
|---------|-------|-------|
|
||||
| `apps/client/index.html` | `<title>Docmost</title>` | `<title>DocAdenice</title>` |
|
||||
| `apps/client/index.html` | `apple-mobile-web-app-title content="Docmost"` | `content="DocAdenice"` |
|
||||
| `apps/client/src/lib/config.ts` | `getAppName() return "Docmost"` | `return "DocAdenice"` |
|
||||
| `apps/client/src/components/layouts/global/app-header.tsx` | brand `aria-label`, `alt`, texte `Docmost` | `DocAdenice` |
|
||||
| `apps/client/src/features/auth/components/auth-layout.tsx` | brand `alt`, texte `Docmost` | `DocAdenice` |
|
||||
| `apps/client/src/components/ui/error-404.tsx` | titre 404 ` - Docmost` | ` - DocAdenice` |
|
||||
| `apps/client/src/features/home/components/home-ai-prompt.tsx` | fallback workspace name `"Docmost"` | `"DocAdenice"` |
|
||||
| `apps/server/src/integrations/transactional/emails/invitation-email.tsx` | `"You have been invited to Docmost."` | `"...DocAdenice."` |
|
||||
| `apps/server/src/integrations/transactional/partials/partials.tsx` | footer `© Docmost` | `© DocAdenice` |
|
||||
| `apps/server/src/core/workspace/services/workspace-invitation.service.ts` | sujet `... has accepted your Docmost invite` | `... DocAdenice invite` |
|
||||
| `apps/server/src/core/workspace/services/workspace-invitation.service.ts` | sujet `... invited you to Docmost` | `... DocAdenice` |
|
||||
| `apps/server/src/integrations/environment/environment.service.ts` | `MAIL_FROM_NAME` default `'Docmost'` | `'DocAdenice'` |
|
||||
| `README.md` | header initial Docmost | bloc "DocAdenice" ajoute au-dessus |
|
||||
|
||||
### KEEP volontairement (non modifies)
|
||||
|
||||
| Element | Raison |
|
||||
|---------|--------|
|
||||
| `package.json` `name: "docmost"` | nom du package npm interne, casserait les imports/scripts Nx |
|
||||
| `@docmost/editor-ext` workspace package | identifiant pnpm workspace |
|
||||
| `docker-compose.yml` service `docmost` | identifiant technique |
|
||||
| `apps/server/src/core/auth/token.module.ts` JWT issuer `'Docmost'` | changer invaliderait les tokens existants |
|
||||
| `apps/server/src/core/workspace/workspace.constants.ts` `'docmost'` dans DISALLOWED_HOSTNAMES | blacklist hostnames reserves, technique |
|
||||
| `apps/server/src/common/helpers/types/export-metadata.types.ts` `source: 'docmost'` | format export pour interop avec Docmost officiel |
|
||||
| `apps/server/src/integrations/export/export.service.ts` filename `docmost-metadata.json` | format export, interop |
|
||||
| `apps/server/src/integrations/import/services/file-import-task.service.ts` (vars `docmostMetadata`, prefix `docmost-import`, fonction `readDocmostMetadata`) | identifiants techniques + lecture du format export Docmost |
|
||||
| `apps/server/src/integrations/import/utils/import.utils.ts` `readDocmostMetadata` | API publique du module import |
|
||||
| `apps/server/src/integrations/security/version.service.ts` URL `github.com/docmost/docmost/releases` | check de version vs upstream officiel |
|
||||
| `apps/server/src/integrations/telemetry/telemetry.service.ts` endpoint `tel.docmost.com` | telemetry upstream (a desactiver dans une iteration future via env var) |
|
||||
| `apps/client/src/components/settings/settings-sidebar.tsx` `help@docmost.com` | email support upstream officiel, on n'usurpe pas |
|
||||
| `apps/client/src/components/settings/app-version.tsx` URL releases | check de version upstream |
|
||||
| `apps/client/src/ee/**` (license, AI, MCP, API keys, share-branding "Powered by Docmost") | code Enterprise Edition propriete Docmost — copy commerciale, ne pas masquer |
|
||||
| `apps/client/src/ee/components/posthog-user.tsx` `source: "docmost-app"` | identifiant analytics upstream |
|
||||
| `apps/server/src/integrations/environment/environment.validation.ts` URL clickhouse exemple | message d'erreur dev-facing technique |
|
||||
| `apps/server/src/core/workspace/services/workspace.service.ts` `@deleted.docmost.com` | placeholder technique pour soft-delete |
|
||||
|
||||
### TODO rebrand complet (futur)
|
||||
|
||||
- Logo SVG / favicon DocAdenice (actuellement reutilise `/icons/favicon-32x32.png` upstream)
|
||||
- Manifest PWA (`apps/client/public/manifest.json`) : name, short_name, icons
|
||||
- `apps/client/public/icons/` : pack d'icones Acadenice (16, 32, 192, 512, apple-touch)
|
||||
- Palette couleur design system (theme Mantine custom)
|
||||
- Eventuellement disable telemetry upstream par defaut (env var ou patch)
|
||||
- Decider du sort de l'EE branding ("Powered by Docmost" sur les pages partagees publiques)
|
||||
- Crowdin / i18n : ajouter une cle `appName` au lieu du hardcode et router via `getAppName()`
|
||||
- Strategie : renommer le package npm `docmost` -> `docadenice` quand on aura un build pipeline custom complet (impacte trop d'imports actuellement)
|
||||
|
|
@ -1,3 +1,11 @@
|
|||
# DocAdenice
|
||||
|
||||
> Fork Acadenice de Docmost, customise pour formation-hub.
|
||||
> Nom de marque temporaire en attendant le rebranding complet (logo, design system, manifest PWA).
|
||||
> Voir `ACADENICE_PATCHES.md` pour la liste des patches custom appliques sur l'upstream.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<h1><b>Docmost</b></h1>
|
||||
<p>
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
<link rel="icon" type="image/png" sizes="32x32" href="/icons/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/icons/favicon-16x16.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no" />
|
||||
<title>Docmost</title>
|
||||
<title>DocAdenice</title>
|
||||
<meta name="theme-color" content="#1f1f1f" media="(prefers-color-scheme: dark)" />
|
||||
<meta name="theme-color" content="#f6f7f9" media="(prefers-color-scheme: light)" />
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-touch-fullscreen" content="yes" />
|
||||
<meta name="apple-mobile-web-app-title" content="Docmost" />
|
||||
<meta name="apple-mobile-web-app-title" content="DocAdenice" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
||||
<!--meta-tags-->
|
||||
|
|
|
|||
|
|
@ -84,11 +84,11 @@ export function AppHeader() {
|
|||
/>
|
||||
</Tooltip>
|
||||
|
||||
<Link to="/home" className={classes.brand} aria-label="Docmost">
|
||||
<Link to="/home" className={classes.brand} aria-label="DocAdenice">
|
||||
<Box hiddenFrom="sm" className={classes.brandIcon}>
|
||||
<img
|
||||
src="/icons/favicon-32x32.png"
|
||||
alt="Docmost"
|
||||
alt="DocAdenice"
|
||||
width={22}
|
||||
height={22}
|
||||
/>
|
||||
|
|
@ -99,7 +99,7 @@ export function AppHeader() {
|
|||
style={{ userSelect: "none" }}
|
||||
visibleFrom="sm"
|
||||
>
|
||||
Docmost
|
||||
DocAdenice
|
||||
</Text>
|
||||
</Link>
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ export function Error404() {
|
|||
return (
|
||||
<>
|
||||
<Helmet>
|
||||
<title>{t("404 page not found")} - Docmost</title>
|
||||
<title>{t("404 page not found")} - DocAdenice</title>
|
||||
</Helmet>
|
||||
<Container className={classes.root}>
|
||||
<Title className={classes.title}>{t("404 page not found")}</Title>
|
||||
|
|
|
|||
|
|
@ -12,12 +12,12 @@ export function AuthLayout({ children }: AuthLayoutProps) {
|
|||
<Group justify="center" gap={8} className={classes.logo}>
|
||||
<img
|
||||
src="/icons/favicon-32x32.png"
|
||||
alt="Docmost"
|
||||
alt="DocAdenice"
|
||||
width={22}
|
||||
height={22}
|
||||
/>
|
||||
<Text size="28px" fw={700} style={{ userSelect: "none" }}>
|
||||
Docmost
|
||||
DocAdenice
|
||||
</Text>
|
||||
</Group>
|
||||
{children}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ export default function HomeAiPrompt() {
|
|||
return (
|
||||
<div className={classes.wrapper}>
|
||||
<h1 className={classes.heading}>
|
||||
{t("Welcome to {{name}}", { name: workspace?.name ?? "Docmost" })}
|
||||
{t("Welcome to {{name}}", { name: workspace?.name ?? "DocAdenice" })}
|
||||
</h1>
|
||||
<div className={classes.subtitle}>
|
||||
{t("Ask anything or search your workspace")}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ declare global {
|
|||
}
|
||||
|
||||
export function getAppName(): string {
|
||||
return "Docmost";
|
||||
return "DocAdenice";
|
||||
}
|
||||
|
||||
export function getAppUrl(): string {
|
||||
|
|
|
|||
|
|
@ -318,7 +318,7 @@ export class WorkspaceInvitationService {
|
|||
|
||||
await this.mailService.sendToQueue({
|
||||
to: invitedByUser.email,
|
||||
subject: `${newUser.name} has accepted your Docmost invite`,
|
||||
subject: `${newUser.name} has accepted your DocAdenice invite`,
|
||||
template: emailTemplate,
|
||||
});
|
||||
}
|
||||
|
|
@ -467,7 +467,7 @@ export class WorkspaceInvitationService {
|
|||
|
||||
await this.mailService.sendToQueue({
|
||||
to: inviteeEmail,
|
||||
subject: `${invitedByName} invited you to Docmost`,
|
||||
subject: `${invitedByName} invited you to DocAdenice`,
|
||||
template: emailTemplate,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ export class EnvironmentService {
|
|||
}
|
||||
|
||||
getMailFromName(): string {
|
||||
return this.configService.get<string>('MAIL_FROM_NAME', 'Docmost');
|
||||
return this.configService.get<string>('MAIL_FROM_NAME', 'DocAdenice');
|
||||
}
|
||||
|
||||
getMailBlockedRecipientDomains(): string[] {
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ export const InvitationEmail = ({ inviteLink }: Props) => {
|
|||
<MailBody>
|
||||
<Section style={content}>
|
||||
<Text style={paragraph}>Hi there,</Text>
|
||||
<Text style={paragraph}>You have been invited to Docmost.</Text>
|
||||
<Text style={paragraph}>You have been invited to DocAdenice.</Text>
|
||||
<Text style={paragraph}>
|
||||
Please click the button below to accept this invitation.
|
||||
</Text>
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ export function MailFooter() {
|
|||
<Section style={footer}>
|
||||
<Row>
|
||||
<Text style={{ textAlign: 'center', color: '#706a7b' }}>
|
||||
© {new Date().getFullYear()} Docmost, All Rights Reserved <br />
|
||||
© {new Date().getFullYear()} DocAdenice, All Rights Reserved <br />
|
||||
</Text>
|
||||
</Row>
|
||||
</Section>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue