~/activity/milestone
Back to timeline
Portfolio release 1.0

Portfolio release 1.0

Released on 30 August 2026, the initial AI portfolio connected PDF ingestion, document-grounded chat, and a public source library, with automated deployment to Cloudflare Workers.

Major 1.0 Release

On 30 August 2026, Leonardo launched the portfolio at leonardoprasetyo.com, with the first recorded successful deployment completing at approximately 5:21 pm Melbourne time.

Production Deployment

  • Cloudflare hosting: Builds the Nuxt application through Nitro for Cloudflare Workers, with bindings for Workers AI, D1, R2, and Vectorize.
  • Automated validation: GitHub Actions runs linting, TypeScript checks, the production build, and a Wrangler deployment dry run.
  • Database migrations: Applies D1 migrations as part of the production deployment process.
  • Controlled deployment: Deploys from main after validation succeeds and serializes production deployments.
  • Production verification: Runs an HTTP smoke test against the deployed site to confirm it responds successfully.

PDF Ingestion

  • Validated document uploads: Checks PDF signatures, file size, and SHA-256 checksums before processing. Original PDFs are stored in Cloudflare R2.
  • Text extraction and chunking: Extracts text with pdf-parse, with Cloudflare PDF-to-Markdown conversion as a fallback. LangChain splits text into approximately 1,000-character chunks with 150-character overlap, preserving page references.
  • Semantic indexing: Generates 1,024-dimensional vectors using Qwen3 Embedding 0.6B on Cloudflare Workers AI. Vectorize stores embeddings; D1 stores document metadata and authoritative chunk text.
  • Verified publication: Confirms new vectors are available before activating the document. This release supports one active document at a time.
  • Processing limits: Supports PDFs up to 10 MiB, 200 pages, 500,000 extracted characters, and 250 indexed chunks.

RAG Chat

  • Semantic retrieval: Embeds each question with Qwen and retrieves up to five relevant passages from the active document using Vectorize cosine similarity.
  • Verified source context: Reloads matching passages from D1 and checks that they belong to the currently published document generation.
  • Streaming answers: Uses IBM Granite 4.0 H Micro through Cloudflare Workers AI and the AI SDK, with requests routed through Cloudflare AI Gateway.
  • Document citations: Returns source filenames, page numbers, excerpts, and links to the relevant PDF pages.
  • Public usage controls: Adds request validation, bounded conversation context, and a five-question daily allowance per network.

Public Document Library (read)

  • Source browsing: Provides Library, Files, and RAG Database views built with Nuxt 4, Vue, and Nuxt UI.
  • Document details: Displays filenames, file sizes, page counts, chunk counts, upload dates, and publication status.
  • PDF access: Serves published documents through application endpoints backed by Cloudflare R2, including HTTP range support.
  • Index inspection: Exposes the embedding model, vector dimensions, distance metric, and published vector count.
  • Chunk previews: Provides paginated text previews with page references and embedding metadata.