feat: enable semantic CSS by default

This commit is contained in:
Amruth Pillai
2026-07-30 16:28:44 +02:00
parent 1ee24e5a9f
commit 3589b534f5
19 changed files with 46 additions and 1696 deletions
@@ -7,8 +7,6 @@ export type FeatureFlags = {
disableEmailAuth: boolean;
showSponsors: boolean;
smtpEnabled: boolean;
semanticCssAuthoring: boolean;
semanticCssDefault: boolean;
};
// Mirrors isSmtpEnabled() in packages/email/src/transport.ts (kept local to avoid an api -> email dependency).
@@ -32,8 +30,6 @@ export const flagsRouter = {
disableEmailAuth: z.boolean().describe("Whether email-based authentication is disabled on this instance."),
showSponsors: z.boolean().describe("Whether sponsor placements are shown on this instance."),
smtpEnabled: z.boolean().describe("Whether outbound email (SMTP) is configured on this instance."),
semanticCssAuthoring: z.boolean().describe("Whether Semantic CSS authoring is enabled on this instance."),
semanticCssDefault: z.boolean().describe("Whether new resumes start in Semantic CSS mode."),
}),
)
.handler(
@@ -42,8 +38,6 @@ export const flagsRouter = {
disableEmailAuth: env.FLAG_DISABLE_EMAIL_AUTH,
showSponsors: env.FLAG_SHOW_SPONSORS,
smtpEnabled: isSmtpEnabled(),
semanticCssAuthoring: env.FLAG_SEMANTIC_CSS_AUTHORING,
semanticCssDefault: env.FLAG_SEMANTIC_CSS_DEFAULT,
}),
),
};
@@ -8,8 +8,6 @@ const mocks = vi.hoisted(() => ({
getById: vi.fn(),
}));
vi.mock("@reactive-resume/env/server", () => ({ env: { FLAG_SEMANTIC_CSS_DEFAULT: false } }));
vi.mock("../../context", async () => {
const { os } = await vi.importActual<typeof import("@orpc/server")>("@orpc/server");
return {
-2
View File
@@ -1,4 +1,3 @@
import { env } from "@reactive-resume/env/server";
import { resumeDataSchema } from "@reactive-resume/schema/resume/data";
import { generateId, generateRandomName, slugify } from "@reactive-resume/utils/string";
import { protectedProcedure } from "../../context";
@@ -74,7 +73,6 @@ export const crudRouter = {
locale: context.locale,
userId: context.user.id,
data: createResumeData({
semanticCssDefault: env.FLAG_SEMANTIC_CSS_DEFAULT,
withSampleData: input.withSampleData,
name: input.name,
locale: context.locale,
@@ -95,19 +95,17 @@ describe("hasRenderDataChanged", () => {
});
describe("createResumeData", () => {
it("seeds empty semantic source only for the default-enabled cohort", () => {
expect(createResumeData({ semanticCssDefault: true }).metadata.stylesheet).toEqual({
it("always seeds an empty semantic stylesheet", () => {
expect(createResumeData({}).metadata.stylesheet).toEqual({
mode: "semantic",
source: { languageVersion: 1, text: "@version 1;\n" },
applied: { languageVersion: 1, text: "@version 1;\n" },
});
expect(createResumeData({ semanticCssDefault: false }).metadata.stylesheet).toBeUndefined();
});
it("clones normal and sample defaults instead of mutating shared data", () => {
const normal = createResumeData({ semanticCssDefault: false, locale: "de-DE" });
const normal = createResumeData({ locale: "de-DE" });
const sample = createResumeData({
semanticCssDefault: true,
withSampleData: true,
name: "Sample Person",
locale: "de-DE",
@@ -6,7 +6,6 @@ import { createSampleResumeData } from "@reactive-resume/schema/resume/sample";
import { EMPTY_SEMANTIC_CSS_SOURCE } from "@reactive-resume/schema/resume/stylesheet";
type CreateResumeDataOptions = {
semanticCssDefault: boolean;
withSampleData?: boolean;
name?: string;
locale?: Locale;
@@ -30,13 +29,11 @@ export function createResumeData(options: CreateResumeDataOptions): ResumeData {
const data = structuredClone(options.withSampleData ? createSampleResumeData(options.name) : defaultResumeData);
if (options.locale) data.metadata.page.locale = options.locale;
if (options.semanticCssDefault) {
data.metadata.stylesheet = {
mode: "semantic",
source: { languageVersion: 1, text: EMPTY_SEMANTIC_CSS_SOURCE },
applied: { languageVersion: 1, text: EMPTY_SEMANTIC_CSS_SOURCE },
};
}
data.metadata.stylesheet = {
mode: "semantic",
source: { languageVersion: 1, text: EMPTY_SEMANTIC_CSS_SOURCE },
applied: { languageVersion: 1, text: EMPTY_SEMANTIC_CSS_SOURCE },
};
return data;
}
-2
View File
@@ -83,8 +83,6 @@ export const env = createEnv({
FLAG_SHOW_SPONSORS: z.stringbool().default(false),
FLAG_ALLOW_UNSAFE_AI_BASE_URL: z.stringbool().default(false),
FLAG_ALLOW_UNSAFE_OAUTH_REDIRECT_URI: z.stringbool().default(false),
FLAG_SEMANTIC_CSS_AUTHORING: z.stringbool().default(false),
FLAG_SEMANTIC_CSS_DEFAULT: z.stringbool().default(false),
},
runtimeEnv: process.env,
emptyStringAsUndefined: true,