Merge pull request #1240 from AnishSarkar22/feat/resume-builder
Some checks failed
Build and Push Docker Images / tag_release (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_backend, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_web, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-24.04-arm, linux/arm64, arm64) (push) Has been cancelled
Build and Push Docker Images / build (./surfsense_web, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-latest, linux/amd64, amd64) (push) Has been cancelled
Build and Push Docker Images / create_manifest (backend, surfsense-backend) (push) Has been cancelled
Build and Push Docker Images / create_manifest (web, surfsense-web) (push) Has been cancelled

feat: resume builder
This commit is contained in:
Rohan Verma 2026-04-17 13:41:32 -07:00 committed by GitHub
commit 2b2453e015
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 1917 additions and 60 deletions

View file

@ -0,0 +1,42 @@
"""126_add_report_content_type
Revision ID: 126
Revises: 125
Create Date: 2026-04-15
Adds content_type column to reports table to distinguish between
Markdown reports and Typst-based resumes.
"""
from __future__ import annotations
from collections.abc import Sequence
import sqlalchemy as sa
from alembic import op
revision: str = "126"
down_revision: str | None = "125"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
def upgrade() -> None:
conn = op.get_bind()
columns = [c["name"] for c in sa.inspect(conn).get_columns("reports")]
if "content_type" in columns:
return
op.add_column(
"reports",
sa.Column(
"content_type",
sa.String(20),
nullable=False,
server_default="markdown",
),
)
def downgrade() -> None:
op.drop_column("reports", "content_type")

View file

@ -0,0 +1,43 @@
"""127_seed_build_resume_prompt
Revision ID: 127
Revises: 126
Create Date: 2026-04-15
Seeds the 'Build Resume' default prompt for all existing users.
New users get it automatically via SYSTEM_PROMPT_DEFAULTS on signup.
"""
from __future__ import annotations
from collections.abc import Sequence
import sqlalchemy as sa
from alembic import op
revision: str = "127"
down_revision: str | None = "126"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
def upgrade() -> None:
conn = op.get_bind()
conn.execute(
sa.text(
"""
INSERT INTO prompts
(user_id, default_prompt_slug, name, prompt, mode, version, is_public, created_at)
SELECT u.id, 'build-resume', 'Build Resume',
E'Build me a professional resume. Here is my information:\\n\\n{selection}',
'explore'::prompt_mode, 1, false, now()
FROM "user" u
ON CONFLICT (user_id, default_prompt_slug) DO NOTHING
"""
)
)
def downgrade() -> None:
op.execute("DELETE FROM prompts WHERE default_prompt_slug = 'build-resume'")