DEV Community

Emily Jing-Lan
Emily Jing-Lan

Posted on

Portfolio & Summarizing Dev Journals Using Google AI & Cloud Run

New Year, New You Portfolio Challenge Submission

This is a submission for the New Year, New You Portfolio Challenge Presented by Google AI

About Me

I’m a software engineer with a background in education and instructional design. Before moving into engineering full time, I spent years teaching and designing learning materials, which shaped how I think about clarity, structure, and how people actually absorb technical information.

With this portfolio, I wanted to explore the intersection of software engineering, learning, and AI-assisted reflection—not just showcasing projects, but also capturing how I learn and reason about systems over time. This portfolio is both a technical artifact and a learning journal. I want to have a platform that I can store all of my works.

Portfolio

Here is my live portfolio deployment on Google Cloud Run:

<iframe
src="https://emily-stacy-portfolio-465092161508.us-central1.run.app/"
style="width: 100%; height: 800px; border: 1px solid #e2e8f0; border-radius: 12px;"
loading="lazy"

(For the deployment label requirement, I deployed this service with: --update-labels dev-tutorial=blog-devcommunity2026.)

How I Built It

Frontend

  • React + TypeScript
  • Custom journal schema to support multiple content formats (sections, tables, lists, code blocks)
  • Review Mode UI that hides details and emphasizes high-level takeaways

Backend

  • Node.js + Express
  • Deployed as a containerized service on Google Cloud Run
  • A custom summarization endpoint that sends journal content to Google Gemini and normalizes the response

Google AI

  • Google Gemini (gemini-2.5-flash) for summarization
  • Instead of assuming a fixed AI response format, I built a resilient extraction layer that can interpret multiple JSON shapes (sections, arrays, nested objects, tables, etc.) with the help of Gemini (Note: Since I’m on the free tier, requests may return 429 (quota exceeded) errors when the usage limit is reached)

  • This mirrors real-world conditions where AI outputs aren’t always predictable

Design Decisions

  • I intentionally treated AI as a helper, not a source of truth

  • The system falls back gracefully when summaries can’t be confidently

    What I'm Most Proud Of

  • AI integration: Handling inconsistent AI outputs without breaking the UI was one of the hardest and most rewarding parts.

  • Learning-first design: The portfolio doesn’t just show results—it captures the thinking process behind them.

  • End-to-end ownership: From frontend design to backend APIs to Cloud Run deployment and CI/CD, this project represents full-stack ownership.

  • Practical AI usage: Instead of flashy demos, the AI feature solves a real personal problem—reviewing and retaining complex technical knowledge.

Top comments (0)