# About HER WAKA
Source: https://herwaka.shesharp.org.nz/programme/about-her-waka
HER WAKA — Navigating pathways into sustainable employment. Programme mission, target audience, key components, and expected outcomes.
**Navigating pathways into sustainable employment.**
HER WAKA is a dynamic, employment-focused programme delivered by SheSharp in Auckland for Ministry of Social Development (MSD) clients who are ready to strengthen their pathway into work. Running monthly from March to June 2026, each session is designed to build job readiness, confidence, and practical understanding of the New Zealand labour market.
## Mission
To equip participants with practical skills, knowledge, and confidence to navigate the modern job market — from understanding their employment rights to leveraging AI tools in their career journey.
## Who Is It For?
HER WAKA is designed for MSD clients in the Auckland region who are ready to take their next step into meaningful work. No prior tech experience is required.
## Programme Format
Each two-hour session brings together up to 25 participants in a supportive, high-impact environment that blends inspiration, practical skills, and direct employer insight. Through real conversations and structured learning, participants gain clarity on how to position themselves confidently and competitively in today's job market.
## What to Expect
* **Inspirational speakers** sharing authentic employment journeys and practical lessons from navigating the New Zealand workforce
* **Employer and recruiter panels** offering direct insight into current hiring expectations
* **Practical job-readiness sessions** focused on professional presentation, interview confidence, and effective employer engagement
* **Clear and accessible employment rights guidance** to help you understand your rights at work
* **Structured networking opportunities** with employers, recruiters, and industry representatives
## Programme Components
| Component | Description |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| **Speakers** | Industry professionals share career insights and real-world experiences |
| **RCSA Insights** | Guidance from the Recruitment, Consulting and Staffing Association on the hiring landscape and working with recruiters |
| **Job Readiness** | Professional presentation, interview confidence, and effective employer engagement |
| **Employment Rights** | Understanding your rights as an employee in Aotearoa New Zealand |
| **Networking** | Structured opportunities to connect with employers, recruiters, and industry representatives |
## Expected Outcomes
By completing HER WAKA, participants will:
* Understand how to use AI tools to support their job search
* Have an updated CV and LinkedIn profile
* Know their employment rights under New Zealand law
* Feel confident networking with professionals and recruiters
* Be connected to the SheSharp community for ongoing support
***
## Our Partners
HER WAKA is made possible through the support of our partners:
***
HER WAKA is more than an event. It is a practical, supportive step toward sustainable employment and long-term workforce participation.
***
This website was designed and built by [Chan Meng](https://chanmeng.org/) — Senior AI/ML Engineer, SheSharp panel speaker, and vibe coding workshop instructor.
# About SheSharp
Source: https://herwaka.shesharp.org.nz/programme/about-shesharp
Learn about SheSharp, the organisation behind HER WAKA.
**SheSharp** is a not-for-profit organisation founded in 2014, dedicated to supporting women in technology and digital careers across Aotearoa New Zealand.
## Our Mission
SheSharp exists to inspire, educate, and connect women in tech. We believe that diversity drives innovation, and we work to remove barriers that prevent women from entering and thriving in the technology sector.
## What We Do
SheSharp delivers programmes, workshops, and community events that support women at every stage of their career journey — from those taking their first steps into tech to experienced professionals looking to grow.
### Past Initiatives
* **Community workshops** on web development, data skills, and digital literacy
* **Mentorship programmes** connecting emerging talent with industry professionals
* **Networking events** bringing together women in tech across Auckland
* **Partnerships** with government agencies and industry bodies to deliver employment-focused programmes
## Delivering HER WAKA
SheSharp was selected by the Ministry of Social Development to deliver the HER WAKA programme based on our track record of running accessible, high-quality digital skills programmes for diverse communities.
## Connect With Us
* [SheSharp Website](https://www.shesharp.org.nz)
* [LinkedIn](https://www.linkedin.com/company/shesharpnz/posts/?feedView=all)
* [Instagram](https://www.instagram.com/shesharpnz/)
* [Facebook](https://www.facebook.com/shesharpnz/)
* [YouTube](https://www.youtube.com/channel/UCfNDV1btAhwWwEXSyxNd5_Q)
# Programme Schedule
Source: https://herwaka.shesharp.org.nz/programme/schedule
Session dates, venue information, event times, and what to bring.
HER WAKA runs four workshop sessions from March to June 2026. All sessions are held in person at academyEX Pikopiko, Auckland.
## Session Dates
| Session | Date | Time | Theme |
| ------- | ----------------------- | ------------------ | ------------------------------- |
| 1 | Wednesday 25 March 2026 | 12:00 pm – 2:00 pm | AI & The Future of Work |
| 2 | Tuesday 7 April 2026 | 12:00 pm – 2:00 pm | #IAmRemarkable & Vibe Coding |
| 3 | Tuesday 5 May 2026 | 12:00 pm – 2:00 pm | Cybersecurity Workshop |
| 4 | Tuesday 2 June 2026 | 12:00 pm – 2:00 pm | Personal Branding & Growth Tips |
## Venue
**academyEX Pikopiko**
Auckland, New Zealand
Setup begins at 11:30 am. Guest registration and arrival from 12:00 pm.
## Event Format
Each session runs for two hours and follows a structured format:
1. **Panel or speaker session** — Inspirational talks and industry insights
2. **Hands-on activity** — Practical exercises and interactive learning
## What to Bring
* **A laptop** — required for the hands-on activity (especially the March AI session)
* A notebook and pen
* Your current CV (digital or printed) if you have one
* An open mind and willingness to learn
## Participant Cap
Each session welcomes up to **25 participants** to ensure a supportive, interactive learning environment with plenty of one-on-one guidance.
## Registration
Past sessions:
* ~~March 25 — AI & The Future of Work~~ *(Session concluded — 39 attendees. View the [photo gallery](https://photos.app.goo.gl/FKFwVTSD7RxK7Sws6).)*
* ~~April 7 — #IAmRemarkable & Vibe Coding~~ *(Session concluded — 32 attendees. View the [photo gallery](https://photos.app.goo.gl/Vp9jWLFzwjS1kQAj9).)*
Upcoming sessions:
* **May 5 — Cybersecurity Workshop** *(Strictly by invitation only)*
* [June 2 — Personal Branding & Growth Tips](https://events.humanitix.com/she-sharp-ministry-of-social-development-academyex-her-waka-june-2026)
If you have not yet registered, speak with your MSD case manager or visit the [SheSharp website](https://www.shesharp.org.nz) for more information.
# AI Tools & Free Courses
Source: https://herwaka.shesharp.org.nz/resources/ai-tools-learning
Free AI productivity tools and beginner-friendly AI courses to boost your career.
AI tools are becoming more accessible every day. Here are some free tools and courses to help you get started — no technical background required.
## AI Productivity Tools
Transforms your files (PDFs, audio, etc.) into polished presentations and audio summaries.
A smart AI slideshow tool that helps create professional slides using real images and research.
Instantly analyses your resume and provides guidance on improving its ATS compatibility.
A curated list of free AI recruiting apps covering resume parsing, candidate sourcing, chatbots, and more.
AI-powered search engine that delivers precise answers with cited sources — great for research and learning.
An AI notepad for meetings — combines your notes with audio transcription to generate polished meeting summaries.
## Creative & Interactive AI Tools
Quickly generate polished presentations, documents, and web pages using AI.
A fun AI doodle recognition game by Google — draw and see if AI can guess what it is.
Generate high-quality music tracks with AI — no musical background required.
Chat with multiple leading AI models (ChatGPT, Claude, Gemini, and more) in one platform.
Upload any PDF and chat with it — ask questions, get summaries, and extract key information.
Build apps and websites through natural language conversation — no coding experience required.
Google Gemini's native image generation model — create and edit images through conversation in Google AI Studio.
### Suno AI Demo: *Never Gonna Type It Out*
Here's a fun example of what Suno AI can create — an 80s synth-pop track about vibe coding, generated entirely by AI:
## Free AI Courses
These courses are designed for beginners and are completely free to access.
| Course | Provider | Link |
| ---------------- | ----------------------------------- | ------------------------------------------------------------------------------------- |
| Elements of AI | University of Helsinki & MinnaLearn | [elementsofai.com](https://www.elementsofai.com) |
| Learn AI Skills | Google | [ai.google/education](https://ai.google/education) |
| AI for Beginners | Microsoft | [microsoft.github.io/AI-For-Beginners](https://microsoft.github.io/AI-For-Beginners/) |
| OpenAI Academy | OpenAI | [openai.com/academy](https://openai.com/academy) |
## AI for Your Job Search
Looking for AI tools to optimise your CV, practise interview questions, or improve your speaking skills? See our [Recruitment Agencies & AI Job Tools](/resources/recruitment-agencies#ai-tools-for-job-applications) page for tools like Jobscan, Google Interview Warmup, and Yoodli.
Several AI tools were introduced during **Session 1** of the HER WAKA programme. See the [workshop resources](/workshop/march-2026/resources) page for more.
# Employment Rights in Aotearoa New Zealand
Source: https://herwaka.shesharp.org.nz/resources/employment-rights
Overview of employment rights in Aotearoa New Zealand with links to key resources.
Understanding your rights as an employee is an important part of your career journey. This page provides an overview of key employment rights and links to trusted resources.
## Your Basic Rights
Every employee in New Zealand is entitled to:
* **A written employment agreement** — Your employer must provide this before you start work
* **At least the minimum wage** — This applies to all employees aged 16 and over
* **Holiday and leave entitlements** — Including annual leave, sick leave, bereavement leave, and public holidays
* **A safe workplace** — Your employer must take steps to keep you safe at work
* **Freedom from discrimination** — You cannot be treated unfairly because of your gender, age, ethnicity, disability, or other protected characteristics
* **Fair treatment** — Including good-faith obligations from both employer and employee
## Types of Employment
| Type | Description |
| -------------------------------------- | ----------------------------------------------------------------------- |
| **Permanent (full-time or part-time)** | Ongoing employment with regular hours |
| **Fixed-term** | Employment for a specific period or project with a genuine reason |
| **Casual** | No guaranteed hours; work is offered and accepted on an as-needed basis |
| **Contractor** | Self-employed; different rights and obligations apply |
## Key Resources
* [Employment New Zealand](https://www.employment.govt.nz) — The government's official resource for employment rights and obligations
* [Community Law](https://communitylaw.org.nz) — Free legal information and advice for people in New Zealand
* [Citizens Advice Bureau](https://www.cab.org.nz) — Free, confidential advice on employment and other matters
* [Human Rights Commission](https://www.hrc.co.nz) — Information about discrimination and your rights
## Getting Help
If you believe your employment rights have been violated:
1. Talk to your employer first — many issues can be resolved through open communication
2. Contact [Employment New Zealand](https://www.employment.govt.nz) for guidance
3. Seek free legal advice from [Community Law](https://communitylaw.org.nz)
4. If needed, you can raise a personal grievance within 90 days
Employment rights will be covered in detail during **Session 3** (May 20, 2026) of the HER WAKA programme.
# Job Readiness
Source: https://herwaka.shesharp.org.nz/resources/job-readiness
NZ CV standards, interview preparation, LinkedIn optimisation, and upskilling resources.
Practical guidance to help you prepare for your job search and present yourself with confidence in the New Zealand market.
## CV Tips
NZ CVs differ from resumes in other countries. **Do not include** a photo, date of birth, age, gender, marital status, or nationality. This is standard practice under New Zealand's anti-discrimination employment law.
* **Keep it to 2 pages** — This is the strong consensus among NZ recruiters. One page is often too brief; three or more pages suggest a lack of focus
* **Tailor it for each role** — Adjust your CV to highlight the skills and experience most relevant to the specific job description
* **Start with a professional summary** — Write 2–3 sentences at the top that capture your core value and what you bring. Make it compelling
* **Focus on achievements, not duties** — Do not just list what you were responsible for. Show results with numbers
> **Before:** "Responsible for managing the company database"
>
> **After:** "Redesigned database queries, reducing report generation time by 40% and improving end-user satisfaction"
* **Use clear formatting** — Simple fonts, consistent headings, plenty of white space. Avoid tables, columns, or graphics that automated screening systems (ATS) cannot read
* **Include contact details** — Full name, NZ mobile number, professional email address, and LinkedIn profile link
* **Professional voicemail** — Re-record your voicemail greeting to sound clear and professional. Recruiters will call, and first impressions matter
* **Proofread ruthlessly** — In a detail-oriented market, a single spelling error can raise doubts about your attention to quality
### Skills-Focused vs Work-Focused CV
Choose the format that best represents your situation:
| Format | Best For | Structure |
| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Skills-focused** | Career changers, new graduates, migrants with limited NZ experience | Lead with a skills section grouping your technical and transferable skills, followed by education and any work experience |
| **Work-focused** | Professionals with a consistent career history in the field | List work experience in reverse chronological order, emphasising achievements and progression |
If you are changing careers or new to NZ, a skills-focused CV puts your strengths front and centre — even without extensive local work history.
## Interview Preparation
### Before the Interview
* Research the company, their products, and the role thoroughly
* Prepare answers to common questions (see below)
* Prepare 3–5 thoughtful questions to ask the interviewer
* Plan your outfit and travel route the day before
### "Tell Me About Yourself"
This is almost always the opening question. Do not recite your CV. Use the **past–present–future** framework:
1. **Past** — Briefly mention your relevant background (1–2 sentences)
2. **Present** — What you are doing now and what you are most proud of
3. **Future** — Why you are excited about this role and this company
> **Example:** "I spent five years working in customer service, where I developed strong problem-solving and communication skills. Over the past year, I have been upskilling in web development through the HER WAKA programme and building projects with HTML, CSS, and JavaScript. I am excited about this junior developer role because I want to combine my customer-facing experience with my new technical skills to build products that genuinely help people."
Keep it under two minutes. Practise until it feels natural, not rehearsed.
### The STAR Method
For behavioural questions ("Tell me about a time when..."), use the STAR method:
* **Situation** — Set the scene briefly (where, when, what was happening)
* **Task** — What was your specific responsibility or challenge?
* **Action** — What did *you* personally do? (Spend 70% of your answer here)
* **Result** — What happened? Use numbers or positive outcomes where possible
> **Example question:** "Describe a time you had to learn something new quickly."
>
> **Example answer:** "When I started volunteering at Code Club, I was asked to help children learn Scratch — a tool I had never used. I spent the weekend going through the official tutorials and built a small game to test my understanding. By the following week, I was confidently guiding students through their projects and even helped one student debug a tricky animation loop. The experience taught me that I learn fastest by building something real."
### Common Behavioural Questions
Prepare answers for these — they come up frequently in NZ interviews:
* "Tell me about a time you had to work with someone difficult"
* "Describe a situation where you had to meet a tight deadline"
* "Give an example of when you showed initiative"
* "Tell me about a mistake you made and what you learned from it"
* "Describe how you handled receiving critical feedback"
### Cultural Fit Questions
NZ employers care deeply about how you will fit into their team. You may be asked:
* "What kind of team environment helps you do your best work?"
* "How do you handle disagreements with colleagues?"
* "What does diversity and inclusion mean to you?"
* "How do you stay motivated when work is repetitive or challenging?"
Be genuine. Show empathy, adaptability, and a willingness to learn. Avoid clichéd answers like "I am a perfectionist" — interviewers see through these.
### Questions to Ask the Interviewer
Never say "no questions." This is your chance to show genuine interest and evaluate whether the role is right for you:
1. "What does a typical day look like in this role?"
2. "What are the team's biggest priorities over the next six months?"
3. "How does the team support learning and professional development?"
4. "What do you enjoy most about working here?"
5. "What would success look like in this role after the first three months?"
### During the Interview
* Arrive 10–15 minutes early
* Make eye contact and greet everyone with a smile
* Be honest — it is okay to say you are still learning a skill
* Show enthusiasm for the role and the company
### After the Interview
* Send a thank-you email within 24 hours
* Reference something specific from your conversation
* Reflect on what went well and what you could improve
Practise with AI tools like [Google Interview Warmup](https://grow.google/certificates/interview-warmup/) (free) or [Yoodli](https://www.yoodli.ai) (great for improving speaking clarity). See our [Recruitment Agencies](/resources/recruitment-agencies#ai-tools-for-job-applications) page for more AI preparation tools.
## LinkedIn Optimisation
* **Professional photo** — Use a clear, friendly headshot
* **Compelling headline** — Go beyond your job title (e.g., "Aspiring Data Analyst | Career Changer | Passionate About Technology")
* **Summary section** — Write 3–5 sentences about who you are, what you are looking for, and what you bring
* **Skills and endorsements** — Add relevant skills and ask connections to endorse them
* **Activity** — Engage with posts, share articles, and connect with people in your industry
## Cover Letters
* Address it to a specific person where possible
* Open with why you are interested in the role
* Highlight 2–3 key skills or experiences that match the job description
* Keep it under one page
* End with a clear call to action (e.g., "I would welcome the opportunity to discuss this role further")
## Upskilling Resources
### Career & Tech Platforms
| Resource | Description | Link |
| --------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| LinkedIn Learning | Video courses on professional skills | [linkedin.com/learning](https://www.linkedin.com/learning/) |
| Coursera | Online courses from universities and companies | [coursera.org](https://www.coursera.org) |
| Google Digital Garage | Free digital marketing and data skills courses | [grow.google](https://grow.google/intl/en_nz/) |
| Skills.org.nz | New Zealand-focused career and skills resources | [skills.org.nz](https://www.skills.org.nz) |
| AutoTutor | AI-driven personalised learning for various subjects | [autotutor.org](https://autotutor.org/7-free-online-learning-tools-for-career-development/) |
| MyCareerTech | Hands-on training in IT, business, healthcare, and engineering | [autotutor.org](https://autotutor.org/7-free-online-learning-tools-for-career-development/) |
| Udemy | Skill-specific courses, some free | [udemy.com](https://www.udemy.com) |
| EdX | University-level courses with free audit options | [edx.org](https://www.edx.org) |
| Alison | Free professional development courses and career mapping tools | [alison.com](https://alison.com) |
### Soft Skills Courses
| Resource | Description | Link |
| ------------------------------------ | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| GoSkills Conflict Resolution | Free course on resolving workplace conflicts professionally | [goskills.com](https://www.goskills.com/Soft-Skills/Courses/Conflict-Resolution) |
| GoSkills Deliver Effective Criticism | Free course on giving constructive feedback | [goskills.com](https://www.goskills.com/Soft-Skills/Courses/Deliver-Effective-Criticism) |
# Where to Find Tech Jobs in NZ
Source: https://herwaka.shesharp.org.nz/resources/job-search-platforms
Job boards, the hidden job market, Summer of Tech, and company career pages for finding IT roles in New Zealand.
Where you look for jobs matters as much as how you apply. This guide covers the main platforms, the hidden job market, and a unique NZ programme designed to help newcomers break in.
## Job Boards & Platforms
| Platform | Best For | Link |
| ---------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------ |
| **Seek** | Largest NZ job board with strong IT section and salary insights | [seek.co.nz](https://www.seek.co.nz) |
| **Trade Me Jobs** | NZ-owned; great for smaller companies and roles not listed on Seek | [trademe.co.nz/jobs](https://www.trademe.co.nz/a/jobs) |
| **LinkedIn Jobs** | International and NZ roles; essential for networking and being found by recruiters | [linkedin.com/jobs](https://www.linkedin.com/jobs/) |
| **Indeed NZ** | Aggregates jobs from many sources; good for contract roles | [nz.indeed.com](https://nz.indeed.com) |
| **Student Job Search (SJS)** | Part-time, internship, and graduate roles for students | [sjs.co.nz](https://www.sjs.co.nz) |
| **Careers.govt.nz** | Government roles and career planning tools | [careers.govt.nz](https://www.careers.govt.nz) |
Set up email alerts on Seek and LinkedIn with specific keywords for your target roles. Being one of the first applicants significantly increases your chances of being seen.
## The Hidden Job Market
An estimated 30% of IT jobs in New Zealand are never publicly advertised on job boards.
These roles are filled through referrals, internal networks, and direct applications to company career pages. Here is how to access them:
* **Check company career pages directly** — Many companies post roles on their own website before (or instead of) paying for job board listings
* **Build your network** — Attend meetups, have [coffee meetings](/resources/networking-guide#coffee-meetings-the-power-of-the-flat-white), and stay active in [online tech communities](/resources/tech-communities)
* **Watch the DevelopNZ Slack** — The #jobs channel often has roles posted days or weeks before they appear on Seek. See our [Tech Communities](/resources/tech-communities) page to join
* **Follow target companies on LinkedIn** — You will see new roles in your feed as soon as they are posted
### Companies to Watch
These NZ tech employers regularly hire and are worth checking directly:
Cloud accounting platform — major NZ tech employer.
IT services and solutions across NZ and Australia.
Telecommunications and digital services.
NZ's largest online marketplace.
Medical devices — strong engineering and data teams.
Cinema software used globally — HQ in Auckland.
Create a personal watchlist of 10–15 companies you admire. Check their career pages every week or two — this is how many people find roles with less competition.
## Summer of Tech
[Summer of Tech](https://www.summeroftech.co.nz) is a free programme specifically designed to help students and recent graduates launch their tech careers in New Zealand.
* **Who can join** — Any student enrolled at or recently graduated from a NZ tertiary institution
* **What it offers** — Free bootcamps, CV workshops, and technical training run by industry volunteers
* **Meet & Greet events** — Skip the cold application process and meet hiring managers face-to-face
* **Fair pay guaranteed** — All roles listed through Summer of Tech must pay at least the NZ Living Wage
* **Cost** — Completely free for candidates
Summer of Tech is one of the best ways to get your first NZ tech role if you are a student or recent graduate. Registration is open year-round at [summeroftech.co.nz/candidates](https://www.summeroftech.co.nz/candidates).
## Next Steps
Free agencies that can connect you with roles not on job boards.
NZ-specific CV standards and interview strategies.
# Networking Guide
Source: https://herwaka.shesharp.org.nz/resources/networking-guide
Coffee meetings, tech hubs, events, and strategies for building professional connections in New Zealand.
Building a professional network is one of the most valuable things you can do for your career in New Zealand. In a country of five million people, the tech community is tight-knit — and personal connections open doors that job boards cannot.
## Why Networking Matters
Many job opportunities are never advertised. An estimated [30% of IT jobs in NZ](/resources/job-search-platforms#the-hidden-job-market) are filled through referrals and networks. Networking helps you:
* Learn about roles before they are listed publicly
* Get referrals and recommendations
* Build relationships with people in your industry
* Gain insights into companies and career paths
* Grow your confidence through practice
## Your Elevator Pitch
An elevator pitch is a brief introduction (30–60 seconds) that explains who you are and what you are looking for.
### Structure
1. **Who you are** — Your name and a brief background
2. **What you do or are interested in** — Your skills, experience, or career goals
3. **What you are looking for** — The type of role or opportunity you want
4. **A conversation starter** — A question or comment that invites further discussion
### Example
> "Hi, I'm Sarah. I've spent the last few years raising my family and I'm now looking to return to the workforce. I'm interested in administration and office support roles, and I've recently been upskilling in digital tools through the HER WAKA programme. I'd love to hear about how you got started in your career."
## Networking Strategies
* **Start with who you know** — Friends, family, former colleagues, and community contacts
* **Attend events** — Industry meetups, job fairs, and community events (like SheSharp workshops)
* **Use LinkedIn** — Connect with people you meet, join relevant groups, and engage with posts
* **Volunteer** — Volunteering can help you build skills and meet people in your field
* **Be genuine** — Focus on building real relationships, not just collecting contacts
## Coffee Meetings: The Power of the Flat White
In New Zealand, "catching up for coffee" is the standard way professionals meet informally. In the tech industry especially, coffee meetings are how many people find jobs, mentors, and collaborators. This is not an interview — it is a 30–45 minute conversation between equals.
### How to Set One Up
1. **Find someone interesting** — A professional whose career path inspires you, someone at a company you admire, or a contact from a meetup
2. **Reach out** — Send a short, friendly LinkedIn message or email. Be specific about why you would like to meet and what you hope to learn
3. **Suggest a time and place** — Offer to meet at a cafe near their workplace. Keep it to 30 minutes
4. **You buy the coffee** — You asked for their time, so you pay
### What to Talk About
Come with 3–5 thoughtful questions. Good topics include:
* Their career path and how they got to where they are
* What they enjoy about their role and company
* Trends they see in the industry
* Advice for someone at your stage
### What NOT to Do
* Do not ask "are you hiring?" or treat it as a job interview
* Do not bring a printed CV unless they specifically ask for one
* Do not overstay — respect the time you agreed on
### Etiquette
* Dress in smart casual (clean, tidy, professional but not formal)
* Be on time
* Put your phone away
* Send a thank-you message the same day
* If they suggest connecting you with someone else, follow up promptly and mention their name
Today's coffee meeting can become tomorrow's job referral. The NZ tech community is small — people remember those who were genuine, prepared, and respectful of their time.
## Physical Tech Hubs & Events
### Innovation Spaces
Auckland's tech and innovation hub in Wynyard Quarter. Hosts regular events including the **Migrants in Tech** meetup — a welcoming space specifically for newcomers to NZ's tech scene.
Award-winning co-working space in Takapuna (Auckland's North Shore). Home to 130+ companies with regular community events and Friday networking sessions.
### Key Events
| Event | What It Is | When |
| ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | ------------------- |
| **[Techweek](https://techweek.co.nz)** | NZ's national technology festival — hundreds of free events across the country | May 18–24, 2026 |
| **[Migrants in Tech](https://gridakl.com/migrants-in-tech-community-a-home-at-gridakl/)** | Regular meetup at GridAKL for newcomers to NZ tech. Pizza, talks, and networking | Throughout the year |
| **[Government Innovation Week](https://publicsectornetwork.com/events/government-innovation-week-aotearoa-2026/)** | Public sector tech showcase — useful if you are interested in government IT roles | 2026 |
Techweek 2026 celebrates its 10th anniversary. Volunteering at a Techweek event is an excellent way to meet people across the industry while contributing to the community.
### Regular Meetups
Find your community on [Meetup.com](https://www.meetup.com). Here are some active Auckland groups:
| Meetup | Focus |
| ----------------------------------------------------------------------------------------- | ------------------------------------------------- |
| [GDG Auckland](https://www.meetup.com/gdgauckland/) | Google technologies, Android, Flutter, Gemini AI |
| [Auckland Data Engineering](https://www.meetup.com/auckland-data-engineering-meetup/) | Data pipelines, analytics, data architecture |
| [IT Social Events Auckland](https://itsocialevent.com) | Casual after-work networking for IT professionals |
| [DataEngBytes](https://www.meetup.com/auckland-data-engineering-meetup/events/313375119/) | Annual data engineering conference |
## Following Up
After meeting someone:
* **Connect on LinkedIn** within 24 hours with a personalised message
* **Reference your conversation** — Mention something specific you discussed
* **Stay in touch** — Share articles, congratulate them on achievements, or check in periodically
* **Be patient** — Relationships take time to develop
## Online Tech Communities
Looking for online spaces to connect with others in tech? See our [Tech Communities](/resources/tech-communities) page for Slack workspaces, Discord servers, forums, and communities for women in tech.
## The SheSharp Community
As a HER WAKA participant, you are part of the SheSharp community. This gives you access to:
* **Ongoing events** — Workshops, networking sessions, and community gatherings
* **Online community** — Connect with other women in tech and career changers
* **Mentorship opportunities** — Learn from experienced professionals
* **Job leads and referrals** — Members often share opportunities within the network
Stay connected:
* [SheSharp Website](https://www.shesharp.org.nz)
* [SheSharp LinkedIn](https://www.linkedin.com/company/shesharpnz/posts/?feedView=all)
* [SheSharp Instagram](https://www.instagram.com/shesharpnz/)
* [SheSharp Facebook](https://www.facebook.com/shesharpnz/)
# NZ Tech Job Market 2026
Source: https://herwaka.shesharp.org.nz/resources/nz-it-market
Salary ranges, in-demand skills, and market trends for the New Zealand IT industry.
Understanding the current job market helps you focus your energy on the right skills and roles. Here is what the NZ tech landscape looks like in 2026.
## Market Trends
The NZ tech job market is stabilising after a period of restructuring and budget tightening across both public and private sectors. Here is what this means for job seekers:
* **Precision hiring** — Employers are being more selective, looking for candidates who can deliver value quickly rather than hiring in bulk
* **Skills over headcount** — Companies want people with specific, in-demand skills rather than generalists
* **Tech New Zealand** — The new industry body (formed from NZTech and Tech Alliance) is now the unified voice for NZ's tech ecosystem, focusing on AI, cybersecurity, and innovation
* **Contract and project work** — More organisations are using short-term contracts to fill specific skill gaps, creating opportunities for flexible work
This is not a market where you send the same CV to 50 jobs. Focus on tailoring your applications to roles that match your skills, and invest time in networking. Quality over quantity wins.
## In-Demand Roles & Salary Ranges
These salary ranges reflect 2026 data from industry guides (Robert Half, Hays). Entry-level roles start at the lower end — these figures show the growth potential in each field.
| Role | Salary Range (NZD) | Key Skills |
| ------------------------------ | ------------------- | ------------------------------------------------------------ |
| AI / Machine Learning Engineer | $134,000 – $179,500 | Python, TensorFlow, NLP, data pipelines |
| Cybersecurity Engineer | $118,500 – $190,750 | Risk assessment, penetration testing, compliance, zero trust |
| Cloud / DevOps Engineer | $118,000 – $173,750 | AWS, Azure, Kubernetes, CI/CD, Terraform |
| Software Engineer | $109,250 – $175,500 | JavaScript, Python, .NET, React, APIs |
| Data Scientist / Analyst | $96,250 – $182,500 | SQL, Python, Power BI, data modelling |
| IT Support / Helpdesk | $60,000 – $95,000 | Troubleshooting, M365, Active Directory, customer service |
Salaries vary by location (Auckland tends to be higher), company size, and your specific certifications. Use these ranges as a guide when evaluating offers — not as a guarantee.
## Breaking the "No Local Experience" Barrier
If you are new to New Zealand or changing careers, you may hear that employers want "local experience." This is one of the most common frustrations for newcomers — but it is not an impossible barrier.
### Why Employers Say This
It is rarely about your technical skills. Code works the same everywhere. What employers are really asking is:
* **Can you communicate effectively in a NZ workplace?** — Kiwi workplaces are informal and flat. Managers go by first names, and employees are expected to speak up, ask questions, and take initiative.
* **Do you understand how teams work here?** — Collaboration, directness, and self-management are highly valued. Waiting for instructions without offering ideas can be seen as a lack of engagement.
* **Will you stay?** — Employers invest in onboarding and want to know you are committed to building a career here.
### How to Build Local Credibility
You do not need a paid NZ job to prove you belong. Here are practical ways to build your local profile:
* **Volunteer with [Code Club Aotearoa](https://codeclub.nz)** — Teach children to code for one hour per week. This demonstrates communication skills, community commitment, and connects you with local tech professionals
* **Contribute to NZ open source** — Join the [NZ Open Source Society (NZOSS)](https://nzoss.nz) community. Contributing to local open-source projects gives you verifiable, NZ-based code contributions on your GitHub profile
* **Try a bridging programme** — Organisations like [Industry Connect](https://industryconnect.org) offer structured programmes that combine training with real project experience at NZ software companies
* **Attend local meetups and events** — Being visible in the community shows commitment. See our [Networking Guide](/resources/networking-guide) for where to go
* **Consider a short course** — A Postgraduate Diploma or conversion course at a NZ university gives you access to career services and local connections
Volunteering is highly respected in New Zealand. Even a few months of volunteer work can transform your CV and give you local references to draw on.
## Next Steps
Job boards, the hidden job market, and Summer of Tech.
Coffee meetings, tech hubs, and events to build your network.
# Recruitment Agencies for Tech Jobs
Source: https://herwaka.shesharp.org.nz/resources/recruitment-agencies
Free recruitment agencies that place candidates in NZ tech roles, plus AI tools to optimise your job applications.
Recruitment agencies can connect you with roles you will not find on job boards — and they are completely free for job seekers. The employer pays the agency fee, never you.
## How Recruitment Agencies Work
* **Free for you** — You never pay a recruitment agency to find work. If anyone asks you to pay, that is a red flag
* **Register with 2–3 agencies** — This maximises your coverage without spreading yourself too thin
* **Be honest** — Share your visa status, notice period, salary expectations, and career goals upfront. The more they know, the better they can match you
* **They are your advocate** — Think of recruiters as your marketing team. Give them clear examples of your strengths so they can pitch you effectively to employers
* **Stay in touch** — Check in regularly and update them when your availability or preferences change
## NZ Tech Recruitment Agencies
| Agency | Speciality | Link |
| ----------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| **Beyond Recruitment** | IT, digital, technology. 100% NZ-owned with strong diversity & inclusion focus | [beyondrecruitment.co.nz](https://www.beyondrecruitment.co.nz) |
| **Robert Half** | Technology, finance, admin. Publishes the widely-used NZ Salary Guide | [roberthalf.com/nz](https://www.roberthalf.com/nz/en) |
| **Hays Technology** | IT and digital transformation. Strong in contract and project-based roles | [hays.net.nz](https://www.hays.net.nz) |
| **Absolute IT** | IT-specialist, NZ-wide coverage. Free career advice and market reports | [absoluteit.co.nz](https://absoluteit.co.nz) |
| **Potentia** | NZ tech-focused. Strong startup and cloud computing network, high ratio of unlisted roles | [potentia.co.nz](https://potentia.co.nz) |
| **Madison Recruitment** | IT plus general professional roles across NZ | [madison.co.nz](https://madison.co.nz) |
| **Adecco NZ** | IT, admin, and broad coverage. Good for short-term and flexible roles | [adecco.com/en-nz](https://www.adecco.com/en-nz) |
When registering, have a clean, up-to-date CV ready. Many agencies (like Beyond Recruitment) will ask about your visa status and notice period during registration — have these details prepared.
## AI Tools for Job Applications
These AI tools can help you optimise your CV, practise for interviews, and improve your communication skills. Use them to prepare and build confidence.
Compares your CV against a job description and shows how well they match. Identifies missing keywords and formatting issues that cause automated screening systems (ATS) to reject applications.
Free tool from Google. Practise answering common interview questions with voice — it analyses your responses and highlights areas to improve.
AI speech coach that analyses your speaking pace, filler words (um, ah), and clarity. Especially helpful if English is not your first language.
All-in-one tool combining interview coaching, STAR-method feedback, CV optimisation, and job application tracking.
Comprehensive interview preparation platform covering behavioural, technical, and system design questions with AI-powered feedback.
AI mock interviews with in-depth analysis. Good for practising data science, architecture, and complex technical scenarios.
Use AI tools to **prepare and practise**, not to misrepresent your skills. Tools that provide real-time answers during live interviews exist, but using them is dishonest and risky — the NZ tech community is small, and your reputation matters more than any single job.
## Next Steps
NZ-specific CV standards, the STAR method, and interview strategies.
Job boards, the hidden job market, and Summer of Tech.
# Tech Communities & Online Networks
Source: https://herwaka.shesharp.org.nz/resources/tech-communities
Slack workspaces, Discord servers, forums, and communities for connecting with NZ tech professionals.
Online communities are a great way to learn, get support, and build connections — especially when you are starting out. These are all free to join.
## NZ Tech Slack & Discord Communities
These are where NZ tech professionals communicate daily. Jobs are often shared here before they appear on job boards.
The largest Slack workspace for NZ developers. The **#jobs** channel regularly has roles posted before they appear on Seek. Also has channels for JavaScript, React, Rust, software design, and more.
A curated directory of tech Slack communities worldwide. Find groups for your specific language, framework, or interest area.
When joining a new Slack or Discord community, introduce yourself in the #introductions channel. Mention what you are learning and what you are interested in — the NZ tech community is very welcoming to newcomers.
## Learning & Support Communities
Beginner-friendly community for learning to code, asking questions, and getting help with projects.
Web development discussions, tutorials, and peer support for all skill levels.
Local and global tech meetups, workshops, and community events run by Google.
NZ community promoting open-source software. Great for finding local projects to contribute to and building your GitHub profile.
## Communities for Women & Underrepresented Groups
Global community dedicated to eliminating the gender gap in tech through education, networking, and mentorship.
Community for young and emerging tech professionals to connect, learn, and grow together.
As a HER WAKA participant, you are already part of the SheSharp network. Learn more in our networking guide.
## LinkedIn Groups
LinkedIn has many active tech groups where you can learn from others, share ideas, and discover job opportunities. Search for groups like:
* **"NZ Tech"** or **"New Zealand Technology"** — General NZ tech discussions
* **"Women in Tech NZ"** — Support and networking for women in the NZ tech industry
* **"Auckland IT Professionals"** — Local networking and job sharing
* **"NZ Startups"** — Startup ecosystem news and opportunities
To find and join groups:
1. Go to [linkedin.com/groups](https://www.linkedin.com/groups)
2. Search for topics that interest you
3. Join groups that are active and welcoming to beginners
4. Engage with posts and introduce yourself
For tips on optimising your LinkedIn profile and connecting with professionals, see our [Job Readiness](/resources/job-readiness#linkedin-optimisation) guide.
# Capstone Project (Weeks 9–12)
Source: https://herwaka.shesharp.org.nz/tutorial/ai-bootcamp/capstone
Form a team of 2–4. Evolve your Week-8 codebase into a deployed multi-user AI SaaS MVP. Pick one of three tracks: Campus Life, Personal Growth, or Creative Tools. Demo Day at Week 12.
**Multi-week series · Capstone · Weeks 9–12** · Team project (2–4 people)
Your Week-8 site had exactly one user: *you*. Your capstone must work for strangers, end-to-end. Sign-up (not just sign-in), onboarding, data isolation per user, thoughtful empty states, and a reason for a stranger to come back tomorrow. The capstone is the bridge between "I can ship a personal site" and "I can ship something strangers would use."
Groups of 3 work best. Roles are soft — every member commits code. No "non-technical" seats.
Campus Life, Personal Growth, or Creative Tools. The team may combine elements but the spine should be one theme.
Five-minute live demo, three-minute Q\&A. Public — invited employers, alumni, career-services team.
## The three tracks
Products that serve daily university life. Low friction to get classmates to try it — real user feedback within 4 weeks. *Examples:* lecture-note swap with AI summaries, roommate matcher, campus event radar with a personalised weekly digest, dorm chore-and-bill splitter.
Products where the user's *state* matters — logs, history, streaks. Teaches teams about private data, consent, and longitudinal UX. *Examples:* AI habit coach with weekly LLM-authored reviews, reading companion with spaced repetition, journaling assistant with monthly reflections, workout planner with volume-progression tracking.
Generative products with a clear loop: input → AI output → user iterates. Most visually demo-able at the showcase. *Examples:* AI short-story studio with branch/merge narrative choices, music-prompt playground with shareable rooms, comic-panel generator with PDF export, resume-video script maker.
## Project requirements (non-negotiable)
Every capstone, regardless of track, must include:
* **Authentication** — multiple real human users, not a demo account. Use Neon Auth or equivalent.
* **Persistent state per user** — Neon Postgres as primary store; per-user data isolation verified.
* **At least one AI feature in the critical path** — removing the AI should break the core value. No "AI-washing".
* **Real-time notification** — Slack or email, triggered by a user action.
* **Deployment to Vercel** on a shared team repo. Merge via pull request; no direct-to-main.
* **A one-page landing page** explaining the product to a stranger in under 30 seconds — hero, problem, demo video, sign-up.
* **A working `/feedback` form** that persists to Neon and pings the team's Slack.
## Default stack
Unless a track strongly demands otherwise, teams ship on the same stack you learned across Weeks 1–8:
| Layer | Default |
| -------------- | --------------------------------------------------------------- |
| Framework | Next.js 14 App Router + Tailwind |
| Hosting | Vercel |
| Database + ORM | Neon Postgres + Drizzle |
| Auth | Neon Auth (Google + GitHub providers) |
| File storage | Vercel Blob |
| LLM in product | Gemini 2.5 Flash for cheap calls; Claude for reasoning / agents |
| Notifications | Slack Incoming Webhooks or Resend for email |
| PDF / docs | Typst via skill (where applicable) |
Teams may deviate only with written instructor approval and a clear reason ("we need vector search → add pgvector"; "we need realtime → add Supabase Realtime").
## Timeline
| Week | Focus |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Week 9** | Kickoff, scope, repo. By Day 3: core data model + auth + one end-to-end vertical slice deployed. |
| **Week 10** | Build the critical path. AI-in-the-critical-path feature working end-to-end. First *external* user test logged in `RESEARCH.md`. |
| **Week 11** | Harden, polish, market. Landing page, onboarding, accessibility pass, five real users signed up. |
| **Week 12** | Demo Day. 5-minute live demo per team, 3-minute Q\&A with instructor + invited guests. |
## Demo Day requirements
At Demo Day every team presents in this order, in roughly five minutes:
1. **Problem statement** — 30 seconds. Who hurts? How often?
2. **Solution** — 30 seconds. The product in one sentence.
3. **Tech stack** — 30 seconds. What from Weeks 1–8 did you reuse; what's new.
4. **Live demo** — 3 minutes. Sign up a fresh user on stage; walk through the critical path; land the notification moment.
5. **Challenges faced** — 1 minute. One technical, one team, one user.
6. **What's next** — 30 seconds. Honest: is this worth keeping alive past Week 12?
## Evaluation
| Dimension | Weight | What "excellent" looks like |
| ---------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| Functionality | 30% | Every promised feature works end-to-end on the live site during the demo. Real external users ran the critical path at least 5 times pre-demo. |
| AI in critical path | 20% | The AI feature cannot be removed without the product losing core value. Thoughtful prompt design, visible in the repo as files. |
| Code quality + collaboration | 15% | Healthy commit history; every member shipped real features; PR reviews happened; no secrets in git. |
| UI / UX | 15% | Mobile works. Empty states exist. Error messages are in human language. Onboarding surfaces value in under 2 minutes. |
| Deployment + reliability | 10% | No 500s during demo. Vercel logs are clean. Secrets only in env vars. Migrations documented and reversible. |
| Presentation | 10% | All team members speak. Problem lands in the first 30 seconds. Demo is rehearsed. Post-mortem is candid, not marketing. |
## Deliverables checklist
* Live URL (Vercel production domain).
* Public GitHub team repo with README + setup instructions.
* Landing page with problem + solution + demo video.
* 2-minute demo recording (unlisted YouTube / Vimeo / self-hosted fine).
* 1-page post-mortem (what went well, what hurt, what you'd cut).
* List of five external users (with permission to cite first names).
* Five-minute live demo on Demo Day.
**Prerequisites:** Complete [Week 8 — Typst PDF Automation](/tutorial/ai-bootcamp/week-08-typst-cv) first. The capstone assumes you own the Week-1-to-8 stack and can extend it. If you've never shipped a Vercel deploy through AI before, start at [Week 1](/tutorial/ai-bootcamp/week-01-dev-tools).
**Full spec · 604 KB** — Track examples, week-by-week timeline, full evaluation rubric, instructor guidance.
Build a Full-Stack AI Site
# Build a Full-Stack AI Site (8 Weeks)
Source: https://herwaka.shesharp.org.nz/tutorial/ai-bootcamp/overview
A multi-week tutorial series. By the end, you own one live AI-powered portfolio site with auth, database, file storage, blog, real-time alerts, and AI-generated CV downloads — all driven by natural-language prompts.
**Multi-week series · 8 teaching weeks + 4-week capstone** · Each week ships as a downloadable PDF lecture you can follow at your own pace.
The other tutorials on this site are bite-sized — pick one, ship one thing, move on. This series is different. Across 8 weeks you build **one progressively-deepened product** — your own live, AI-powered personal website — by talking to AI assistants. By Week 8 the same site is your portfolio, your AI clone, your guestbook, your blog, your contact funnel, and the source-of-truth for your auto-generated CV and cover letter.
Every week ships as a polished PDF lecture. Download the week you want; the lecture takes you from "no feature" to "live URL" in roughly two hours of class plus lab.
**Series led by [Chan Meng](https://chanmeng.org/)** — Senior Full-Stack Engineer at She Sharp, Founding Engineer at Gavigo, Master of Applied Computing with Distinction (Lincoln University, NZ). Chan was featured at UN Women CSW69 for her work on AI and gender equality. The series was originally taught as a 12-week mentorship cohort and is shared here, polished and downloadable, for HER WAKA visitors.
## What you will own at the end
Deployed to Vercel, with your name, projects, and accent colour — built by AI from your conversation.
A floating chat widget that answers questions in your voice — Gemini 2.5 Flash with a persona system prompt.
A guestbook with Google sign-in, Postgres persistence, image uploads, and real-time Slack alerts.
MDX posts, syntax-highlighted code, valid RSS feed. Your thinking-out-loud habit, version-controlled.
Form persists to Neon and fires a Slack webhook within two seconds. Spam-defended.
Your profile lives in Postgres. Click *Download CV* — get a PDF. Paste a job description — get a tailored cover letter.
## How the series progresses
```mermaid theme={null}
flowchart LR
W1["Week 1\nDev toolkit"] --> W2["Week 2\nDeploy a site"]
W2 --> W3["Week 3\nAI clone"]
W3 --> W4["Week 4\nDB + auth"]
W4 --> W5["Week 5\nFile uploads"]
W5 --> W6["Week 6\nBlog + RSS"]
W6 --> W7["Week 7\nSlack alerts"]
W7 --> W8["Week 8\nCV automation"]
W8 --> CAP["Weeks 9–12\nTeam capstone"]
```
The whole series rests on one principle, the **delegation rules**: students describe what they want; AI writes, installs, configures, deploys, and commits. Students verify. You only touch tools or files with your own hands when *no CLI, MCP server, or skill can do the job* — which, in practice, means signing into third-party consent screens and copy-pasting secrets that only a human is allowed to see.
## Stack you will use
| Layer | Tool | First introduced |
| ---------------------- | -------------------------------------------- | ---------------- |
| IDEs | Cursor, Claude Code, Gemini CLI | Week 1 |
| Skills / MCP | Vercel MCP, Neon MCP, Typst skill | Week 1 |
| Voice input (optional) | [Wispr Flow](https://wisprflow.ai/r?CHAN115) | Week 1 |
| Version control | GitHub, driven through Cursor | Week 1–2 |
| Web framework | Next.js 14 + Tailwind CSS | Week 2 |
| Hosting | Vercel (CLI + MCP) | Week 2 |
| LLM in product | Gemini 2.5 Flash | Week 3 |
| Database + Auth | Neon Postgres + Neon Auth + Drizzle ORM | Week 4 |
| File storage | Vercel Blob | Week 5 |
| Content | MDX blog | Week 6 |
| Notifications | Slack Incoming Webhook | Week 7 |
| Typesetting | Typst CLI + Typst skill | Week 8 |
## The full reading list
Each week links to a one-page summary on this site, plus the full PDF lecture you can keep and re-read.
**PDF · 587 KB** — Track goal, delegation rules, 8-week plan, assessment strategy, capstone tracks. Start here for the big picture.
Install Cursor, Claude Code, Gemini CLI. Set up MCP servers and skills. Practise the delegation pattern.
Fork the Magic Portfolio template; describe your bio in plain English; ship to Vercel via AI-invoked CLI.
Floating chat widget powered by Gemini 2.5 Flash, answering as you, with streaming responses.
Provision Postgres + Google sign-in by prompt. Add a guestbook. The hinge class of the series.
Vercel Blob, signed upload tokens, client-side compression. Memes alongside guestbook messages.
Graft a `/blog` section onto your site. Publish your first MDX post. Validating RSS feed.
Contact form that writes to Neon and pings Slack in real time. Honeypot, rate limit, spam defences.
Typst skill in Claude Code generates a pixel-perfect CV from your Neon profile. Tailored cover letters from a job description.
Team project: evolve the codebase into a deployed multi-user AI SaaS MVP. Three tracks to pick from.
## Direct PDF downloads
Prefer to read offline? Each lecture is a self-contained PDF.
623 KB · Dev toolkit setup629 KB · Deploy your site647 KB · AI clone679 KB · Neon + auth649 KB · Vercel Blob uploads656 KB · Blog + RSS672 KB · Slack alerts676 KB · CV + cover letter604 KB · Team project spec587 KB · Big picture
## Who this is for
**Beginners welcome.** The series was designed for students who began the cohort having only used ChatGPT on the web. By Week 8 those same students are shipping production features in a single conversation. If you can describe what you want in plain English, you can do this.
You will get the most out of this if:
* You want to *build*, not just learn — every week ends with a live URL you can share.
* You're comfortable with two-hour focused sessions; pacing is roughly *concept → demo → lab → Q\&A*.
* You don't mind paying for nothing — the entire stack uses free tiers (Vercel, Neon, Vercel Blob, Gemini, Slack webhooks). You'll spend \$0 to ship the whole series.
## Going lighter first?
If you're brand new and a multi-week commitment feels like a lot, start with one of the [single-task tutorials](/tutorial/overview) — *Summarise Gmail with AI* or *Voice-Control Your Notes* are 5–30 minute introductions to the same toolchain (Gemini CLI + Wispr Flow). Come back to this series once you've felt one AI assistant do something useful for you.
Ready to start? Head to [Week 1: AI Developer Toolkit](/tutorial/ai-bootcamp/week-01-dev-tools).
# Week 1 — AI Developer Toolkit Setup
Source: https://herwaka.shesharp.org.nz/tutorial/ai-bootcamp/week-01-dev-tools
Install Cursor, Claude Code, and Gemini CLI. Add MCP servers and skills. By the end of the session, your AI assistant has deployed an empty Next.js site to Vercel — and you watched it happen.
**Multi-week series · Week 1 of 8** · \~2 hours of class + lab
This is the only lecture with heavier-than-usual manual setup — from Week 2 onwards, almost every step is a single spoken prompt. The goal of the lab is to get from "no dev tools installed" to "Cursor just deployed an empty Next.js site to Vercel under my account, and I watched it happen."
Cursor (primary IDE), Claude Code (terminal-native), Gemini CLI (free-tier scripting).
Install a Skill and an MCP server; turn an AI chat into a tool-using agent.
Watch Cursor call the Vercel CLI on your behalf and return a live `*.vercel.app` URL.
## Learning objectives
By the end of this session, you should be able to:
* **Install and sign into the three AI coding environments we use all term** — Cursor, Claude Code, and Gemini CLI — and know when to reach for each one.
* **Install a Skill and an MCP server into Claude Code / Cursor** and describe, in one sentence, what each extension lets the AI do on your behalf.
* **Recognise and apply the delegation rules** — know which operations to hand off to AI through a CLI or MCP server, and which (OAuth, DNS, provider-side credentials) you must do with your own hands.
## Core topics
* Why "natural language is the source code" — the doctrine that runs through every later week.
* The three AI environments — Cursor, Claude Code, Gemini CLI — when to use each.
* What MCP servers and Skills are, and how they turn an AI chat into a tool-using agent.
* Voice-first prompting with Wispr Flow (optional but strongly recommended).
* GitHub as the source-of-truth layer that every later week's deploy flow depends on.
## Tools introduced this week
| Tool | Purpose |
| ----------------------- | ----------------------------------------------------------------------- |
| **Cursor** | Primary IDE; built-in AI chat; all weekly work lives here |
| **Claude Code** | Terminal-native AI with MCP + Skills; preferred for the Week 8 PDF flow |
| **Gemini CLI** | Free-tier AI for throwaway scripts and quick explorations |
| **Wispr Flow** | Voice-to-text; dictate long prompts without typing |
| **GitHub** | Source of truth; auto-triggers every Vercel deploy |
| **Vercel CLI** | AI invokes it to deploy, read logs, manage env vars |
| **Neon CLI + Neon MCP** | AI invokes them to provision databases and auth (from Week 4) |
| **Typst skill** | AI invokes it to generate pixel-perfect PDFs (used in Week 8) |
**No prerequisites.** This is the entry point. If you can install software on your laptop and sign in with a Google or GitHub account, you have everything you need.
**Full lecture · 623 KB** — Session plan, hands-on lab steps, troubleshooting.
Deploy your personal website
# Week 2 — Deploy Your Personal Website
Source: https://herwaka.shesharp.org.nz/tutorial/ai-bootcamp/week-02-portfolio-deploy
Fork the Magic Portfolio template through conversation, customise the content in plain English, and ship to Vercel via AI-invoked CLI. By the end of class you have a yourname-portfolio-*.vercel.app URL.
**Multi-week series · Week 2 of 8** · \~2 hours of class + lab
By the end of class you should have a `yourname-portfolio-*.vercel.app` URL that features your photo, short bio, two real projects (or study projects), and your email — all on a responsive, dark-mode-capable site. You will not write a single line of code by hand.
Ask Cursor to fork the Magic Portfolio Vercel template — no `git clone`, no manual setup.
Bio, accent colour, project cards — describe each in plain English, watch AI write the MDX/TSX.
AI invokes the Vercel CLI; you get a production URL and read build logs through chat when something fails.
## Learning objectives
By the end of this session, you should be able to:
* **Fork a production-ready Vercel template through natural-language requests**, without ever cloning a repo with your own hands or running `git clone`.
* **Describe website content in plain English** — bio, projects, links, theme — and watch Cursor translate that description into clean, committed source changes.
* **Trigger a Vercel deploy by prompt**, read the deployment's build log when something goes wrong, and recover by describing the failure to the AI.
## Core topics
* How a Vercel template becomes your own site in one conversation.
* The "describe content in English, let AI write the MDX/TSX" pattern that powers Weeks 2–6.
* The deploy-preview loop: every commit triggers a preview URL you can review before promoting to production.
* Why the first site deploy should be boring on purpose — we'll add the exciting AI bits next week.
## Tools introduced this week
| Tool | Role this week |
| ------------------- | ----------------------------------------------------------------------------------------------------- |
| **Cursor** | The one chat window where everything happens |
| **Vercel MCP** | AI creates the project, deploys, reads logs, sets env vars |
| **GitHub** | Every commit pushes; Vercel rebuilds automatically |
| **Next.js 14** | The framework the Magic Portfolio template ships on |
| **Tailwind CSS** | Styling; AI edits classes when you describe visual changes |
| **Magic Portfolio** | [Vercel template](https://vercel.com/templates/next.js/magic-portfolio) we fork as the starting point |
**Prerequisites:** Complete [Week 1 — AI Developer Toolkit](/tutorial/ai-bootcamp/week-01-dev-tools) first. You need Cursor signed in, the Vercel MCP installed, and GitHub connected before this lab will work.
**Full lecture · 629 KB** — Session plan, hands-on lab steps, troubleshooting.
Add an AI clone of yourself
# Week 3 — Add an AI Clone of Yourself
Source: https://herwaka.shesharp.org.nz/tutorial/ai-bootcamp/week-03-ai-avatar
Integrate Gemini 2.5 Flash as a floating chat widget on your portfolio. Write a persona system prompt that makes the AI answer in your voice. Ship a streaming chat experience to production.
**Multi-week series · Week 3 of 8** · \~2 hours of class + lab
By the end of class your portfolio site will have a floating chat widget in the bottom-right corner. Anyone can open it and ask "tell me about yourself" — the answer arrives streaming, in your voice, grounded in your real background.
Get a free Gemini API key from Google AI Studio — the only manual step. AI does the env-var plumbing.
Your first serious prompt-engineering task: a `persona.md` system prompt that defines voice and constraints.
Floating chat widget with token-by-token streaming, mobile-friendly layout, persistent session.
## Learning objectives
By the end of this session, you should be able to:
* **Obtain an API key from Google AI Studio and wire it into both local `.env.local` and Vercel's production env** — with the AI doing the plumbing and you doing only the human-only OAuth moment.
* **Write a persona system prompt** that makes Gemini 2.5 Flash answer as *you*, in your voice, with your background — your first serious piece of prompt engineering.
* **Describe a streaming chat UI in English** and have Cursor implement it using the Vercel AI SDK, with no hand-written React.
## Core topics
* System prompts vs user prompts: why the *invisible* instructions matter more than the visible ones.
* Streaming responses — why "tokens arrive one by one" is the default mode for modern chat UIs.
* Secret management: where API keys go, where they *don't* go, and how the AI helps you not commit them.
* The "persona file" pattern — keeping your AI-self definition in one editable Markdown file.
## Tools introduced this week
| Tool | Role this week |
| ----------------------------- | -------------------------------------------------------------- |
| **Cursor** | Where you talk; AI writes the chat component |
| **Gemini 2.5 Flash** | The model answering as your AI clone. Fast, cheap, good enough |
| **Google AI Studio** | Where you fetch the free API key. One manual moment |
| **Vercel AI SDK** | Abstracts streaming, state, and provider differences |
| **`.env.local` + Vercel env** | Two places your API key lives — both set by AI via CLI |
**Prerequisites:** Complete [Week 2 — Deploy Your Personal Website](/tutorial/ai-bootcamp/week-02-portfolio-deploy) first. You need a deployed `yourname-portfolio.vercel.app` to graft the chat widget onto.
**Full lecture · 647 KB** — Session plan, hands-on lab steps, troubleshooting.
Go full-stack with Neon and auth
# Week 4 — Go Full-Stack: Neon + Auth
Source: https://herwaka.shesharp.org.nz/tutorial/ai-bootcamp/week-04-fullstack-neon
Provision a real Postgres database and Google sign-in by prompt. Add a guestbook where signed-in visitors leave messages. The hinge class — after this week you ship actual products, not static sites.
**Multi-week series · Week 4 of 8** · \~2 hours of class + lab · The hinge class of the series
By the end of class your site has a guestbook. Visitors click *Sign in with Google*, write a message, and see it appear (with their name + avatar) instantly on your About page. Refresh — the messages persist. This is a full-stack feature: database, auth, server action, UI — and the OAuth consent screen is the only step you do with your own hands.
Neon MCP provisions a real database. Drizzle ORM owns the schema. AI runs the migration.
Neon Auth wires Google as the provider. The OAuth consent screen is your one human moment.
A guestbook with sign-in, server actions, optimistic UI, and revalidation — built end-to-end in one class.
## Learning objectives
By the end of this session, you should be able to:
* **Provision a production Postgres database and an auth system by prompt** — Neon MCP creates the DB, Drizzle defines the schema, and Neon Auth wires Google login, all through one conversation.
* **Recognise and execute the OAuth-consent manual moment** — the one step the AI cannot do for you — without panicking or skipping ahead.
* **Ship a full-stack feature end-to-end** (signed-in visitors leaving messages on your site) in a single 2-hour class, even though you've written zero lines of server code.
## Core topics
* What "going full-stack" actually means when AI writes the stack: a database, an auth layer, server actions, and a UI — all at once.
* Drizzle ORM as a type-safe schema definition the AI can reason about.
* Neon Auth — why it exists and why it's the fastest path from "no login" to "signed-in users" for beginners.
* Env-var plumbing across three environments (local, preview, production) and why AI doing this is a superpower.
* The OAuth trust dance: why Google requires human consent and where the callback URL must match.
## Tools introduced this week
| Tool | Role this week |
| --------------------------- | ---------------------------------------------------- |
| **Neon Postgres** (via MCP) | Serverless Postgres; AI provisions via Neon MCP |
| **Neon Auth** | Drop-in auth with Google provider; AI wires it |
| **Drizzle ORM** | Type-safe schema definition AI reads and extends |
| **Vercel CLI** | Syncs env vars between Neon → local → production |
| **Google Cloud Console** | The one place a human opens the OAuth consent screen |
**Prerequisites:** Complete [Week 3 — Add an AI Clone](/tutorial/ai-bootcamp/week-03-ai-avatar) first. The guestbook lives on the same `my-portfolio` site you've been growing since Week 2.
**Full lecture · 679 KB** — Session plan, hands-on lab steps, OAuth troubleshooting.
Image uploads with Vercel Blob
# Week 5 — Image Uploads with Vercel Blob
Source: https://herwaka.shesharp.org.nz/tutorial/ai-bootcamp/week-05-vercel-blob
Extend the guestbook so visitors can attach images. Direct-to-CDN uploads with signed tokens, content-type validation, and client-side compression — the same pattern Figma and Linear use in production.
**Multi-week series · Week 5 of 8** · \~2 hours of class + lab
By the end of class a signed-in visitor can attach an image to their guestbook message. Photos show up inline above the text, clicking opens full size, and your Vercel Blob dashboard shows each upload. This is the *direct-to-bucket* pattern — image bytes never traverse your Next.js server.
Vercel Blob enabled and wired in one conversation, with the upload token plumbed across all three envs.
Server issues short-lived tokens; browser uploads directly to Blob. Content-type and size enforced server-side.
A 20 MB phone photo compresses to \~1 MB in the browser before upload. Real-world UX, no extra cost.
## Learning objectives
By the end of this session, you should be able to:
* **Provision a Vercel Blob store by prompt** and have the AI wire it into an existing Next.js app end-to-end, including server-only upload tokens.
* **Describe a file-upload UX in English** — drag-and-drop, preview, size cap, content-type filter — and get a working implementation back.
* **Verify a binary round-trip** (pick a file → upload → persist URL in Neon → render from Vercel Blob CDN) as a first-class engineering skill.
## Core topics
* What blob storage is, at the level a beginner needs: URLs that point to files, not to HTML.
* Why you never let the browser upload directly to your server (memory cost + attack surface) — and why signed upload tokens solve both.
* The one-week-ahead mental model: by Week 7 your guestbook entries will trigger Slack notifications. Keeping the schema clean today pays off then.
## Tools introduced this week
| Tool | Role this week |
| ---------------------- | -------------------------------------------------------------- |
| **Vercel Blob** | File storage; CDN-backed URLs; free tier is generous |
| **`@vercel/blob` SDK** | What your server action uses to issue upload tokens |
| **Drizzle ORM** | Adds a new `image_url` column to existing `guestbook_messages` |
| **Cursor** | Writes everything; you describe + verify |
**Prerequisites:** Complete [Week 4 — Go Full-Stack: Neon + Auth](/tutorial/ai-bootcamp/week-04-fullstack-neon) first. You need the working guestbook from Week 4 to extend.
**Full lecture · 649 KB** — Session plan, hands-on lab steps, EXIF and content-type troubleshooting.
Add a blog system with RSS
# Week 6 — Add a Blog System
Source: https://herwaka.shesharp.org.nz/tutorial/ai-bootcamp/week-06-blog-system
Graft a /blog section onto your site using a Vercel template as reference. MDX posts with syntax-highlighted code, a valid RSS feed, and your first first-person recap of weeks 1–5.
**Multi-week series · Week 6 of 8** · \~2 hours of class + lab
By the end of class your site has `/blog` with at least one published post — your own first-person recap of weeks 1–5 — plus an RSS feed at `/feed.xml` that validates clean against the W3C feed validator.
Point Cursor at the Vercel Blog Starter — AI consumes its patterns rather than re-inventing from scratch.
Markdown plus React components. Syntax highlighting via `rehype-pretty-code`, OG metadata, reading time.
`/feed.xml` generated from MDX at build time, with autodiscovery `` in the head. Subscribers welcome.
## Learning objectives
By the end of this session, you should be able to:
* **Graft a real blog onto an existing Next.js app** by describing the feature to Cursor and pointing it at a reference template — without ever hand-editing route files.
* **Write and publish your first MDX post** so that it renders on your live site with proper typography, a cover image, and a working permalink.
* **Ship a valid RSS feed** that a feed reader can subscribe to, because shipping a blog without an RSS feed is shipping half a blog.
## Core topics
* MDX = Markdown + React components. Why this is the right content format for a developer blog.
* Routing: how `app/blog/[slug]/page.tsx` maps to a URL.
* Metadata patterns: frontmatter, OG images, canonical URLs, reading time.
* RSS in 2026: still the cleanest way to be findable and syndicated.
* The "reference-template" prompt pattern: teaching Cursor from an existing good example instead of re-inventing from scratch.
## Tools introduced this week
| Tool | Role this week |
| --------------------------------------- | -------------------------------------------------- |
| **Vercel Blog Starter** | The reference template we point Cursor at |
| **MDX** | Your post files — Markdown + React components |
| **`remark-gfm` + `rehype-pretty-code`** | Syntax-highlighted code blocks in posts |
| **`reading-time` + `gray-matter`** | Frontmatter + reading-time utilities |
| **`feed` (npm)** | Generates valid RSS 2.0 / Atom feeds at build time |
**Prerequisites:** Complete [Week 5 — Image Uploads with Vercel Blob](/tutorial/ai-bootcamp/week-05-vercel-blob) first. The blog grafts onto your existing portfolio repo.
**Full lecture · 656 KB** — Session plan, hands-on lab steps, MDX + RSS troubleshooting.
Real-time Slack notifications
# Week 7 — Real-Time Slack Notifications
Source: https://herwaka.shesharp.org.nz/tutorial/ai-bootcamp/week-07-slack-notifications
Build a contact form that writes to Neon and fires a Slack webhook in one server action. Your first taste of notification-as-observability — how senior engineers actually monitor small products.
**Multi-week series · Week 7 of 8** · \~2 hours of class + lab
By the end of class your live site has a *Contact* page with a form. When someone submits it, the message is saved to Neon *and* a real-time Slack message arrives in a `#my-site-contact` channel in your own Slack workspace — within two seconds, with the sender's name, email, and message.
Create a Slack App, activate Incoming Webhooks, get your webhook URL — the only manual step.
Validated input writes to Neon and POSTs to Slack in one server action. AI writes both.
Honeypot field, rate limit per IP hash, duplicate-content drop — friction for bots, not humans.
## Learning objectives
By the end of this session, you should be able to:
* **Create a Slack App and obtain an incoming webhook URL** — the minimum human work — then hand everything else to Cursor.
* **Build a contact form that writes to Neon and fires a Slack webhook in one server action**, through a single prompt describing the feature end-to-end.
* **Think about notification-as-observability**: why a tiny Slack ping on every real event is how senior engineers *actually* monitor small products in production.
## Core topics
* Slack Apps, Incoming Webhooks, and why this is the cheapest real-time pipe in the world.
* Server actions as the right "trust boundary" for webhook calls — the webhook URL is a secret.
* Fan-out pattern: one event, two destinations (database + Slack). What happens when one of them fails and how to decide whether to retry, log, or drop.
* Spam defence: rate limiting, honeypot fields, content filtering — protecting your Slack from getting pinged 400 times by a bored bot.
## Tools introduced this week
| Tool | Role this week |
| ----------------------------------- | --------------------------------------------------- |
| **Slack** | Where notifications land — your own workspace |
| **Slack Incoming Webhooks** | The simplest HTTP-POST-to-Slack mechanism |
| **Next.js server actions** | Where the form handler lives; server-only secrets |
| **Drizzle + Neon** | New `contact_submissions` table persists every form |
| **`@upstash/ratelimit`** (optional) | Sliding-window rate limit for the form |
**Prerequisites:** Complete [Week 6 — Add a Blog System](/tutorial/ai-bootcamp/week-06-blog-system) first. You need an existing Neon database and signed-in users from Week 4 still wired up.
**Full lecture · 672 KB** — Session plan, hands-on lab steps, webhook + spam-defence troubleshooting.
Typst PDF automation for job applications
# Week 8 — Typst PDF Automation for Job Applications
Source: https://herwaka.shesharp.org.nz/tutorial/ai-bootcamp/week-08-typst-cv
Use the Typst skill in Claude Code to turn your Neon profile into a pixel-perfect CV PDF. Paste a job description, get a tailored cover letter — generated in your voice, sourced from your real profile data.
**Multi-week series · Week 8 of 8** · \~2 hours of class + lab · The grand finale
By the end of class your portfolio site has two new buttons: *Download CV* (produces a polished one-page CV from your Neon profile data) and *Generate cover letter* (paste a job description, get a custom PDF). Both compile via the Typst skill. From this week onward, every real job application takes you 10 minutes, not 60.
Your CV lives as structured data in Neon — education, experience, projects, skills. One source of truth.
The skill writes the `.typ` template, runs the CLI, returns a pixel-perfect PDF. You don't write any Typst by hand.
Paste a JD, click Generate. Claude writes in your voice, citing only real items from your profile.
## Learning objectives
By the end of this session, you should be able to:
* **Invoke the Typst skill through Claude Code** to turn structured profile data in Neon into a pixel-perfect, downloadable PDF — without writing a single line of Typst by hand.
* **Unify one data source (Neon `profile`) across two outputs** — the portfolio site and the CV / cover letter PDFs — proving that *data first, documents later* is a senior engineering habit.
* **Ship one-click "Download CV" and "Generate cover letter for \[job description]" buttons** on your live portfolio that produce custom PDFs on demand.
## Core topics
* Typst, in one paragraph: think "Markdown with superpowers that compiles to PDF". Same tool this lecture handout is compiled with.
* Skills in Claude Code — the Typst skill is shipped by Anthropic and knows how to generate common documents from structured input.
* Data-driven documents: why storing your CV fields in Neon (not Google Docs) makes the CV AI-editable forever.
* Cover letters are the perfect LLM task: structured input (your profile + a job description) + structured output (a formatted PDF).
* The meta moment: this lecture and your CV are both made with the same tool.
## Tools introduced this week
| Tool | Role this week |
| ------------------------------ | ------------------------------------------------------ |
| **Typst CLI** | Compiles `.typ` files to PDFs — fast and deterministic |
| **Typst skill** (Claude Code) | AI writes the `.typ` template and drives the compile |
| **Neon Postgres + Drizzle** | Stores your `profile` row: one source of truth |
| **Claude API** (optional) | Generates tailored cover-letter prose from a JD |
| **Vercel serverless function** | Runs Typst compilation on demand and streams PDF |
**Prerequisites:** Complete [Week 7 — Real-Time Slack Notifications](/tutorial/ai-bootcamp/week-07-slack-notifications) first. You need the auth, database, and rate-limit patterns from Weeks 4 and 7 in place.
**Full lecture · 676 KB** — Session plan, hands-on lab steps, Typst-on-Vercel deployment patterns.
Weeks 9–12: team project
## Looking for the lighter version?
If a one-off polished PDF is all you need (cover letter, invoice, report) — without the database back-end — try the standalone [Create Professional PDFs tutorial](/tutorial/professional-pdf/overview). Same Typst skill, single-task scope, \~1.5 hours.
# Check your commute
Source: https://herwaka.shesharp.org.nz/tutorial/auckland-commute/check-commute
Ask AI to check real-time Auckland Transport data — find delays, compare routes, and get personalised commute advice by speaking or typing in plain English.
Your tools are ready. Now let's put them to work — ask Gemini CLI to check real-time Auckland Transport data and give you advice about your commute.
**Keep your API key handy.** Every prompt in this section includes a URL with `YOUR_API_KEY` — replace it with your actual subscription key each time. If you are using Wispr Flow, speak the description part naturally, then paste the API URL with your key into the prompt.
## Start Gemini CLI
Open your terminal and start Gemini CLI. This is the only raw command you need to type:
```bash title="Copy this command" theme={null}
gemini
```
From here on, everything is natural language — speak it or type it.
## Check for delays on your route
This is your first real commute query. Say or type this prompt:
```text title="Say this or copy this prompt" theme={null}
I want to check if my bus is running late in Auckland.
Fetch the real-time trip updates from this Auckland Transport API:
https://api.at.govt.nz/realtime/legacy/tripupdates?subscription-key=YOUR_API_KEY
Look for any trips on route 70 and tell me in plain English if there are delays, how long they are, and whether I should leave early.
```
**Replace `YOUR_API_KEY`** with your actual subscription key, and change `route 70` to your actual route number. If you are speaking with Wispr Flow, say the description naturally, then paste the URL line.
You should see something like this:
> **Route 70 — Status: Minor delays**
>
> * 2 trips are running 3–5 minutes behind schedule
> * No cancellations
> * Overall: expect a roughly normal commute, but allow an extra 5 minutes
**Your results will be different.** The data is live, so you'll see whatever is happening right now on Auckland's transport network. If there are no delays, that's good news — Gemini will tell you the route is running on time.
## Check service alerts
Service alerts cover everything — planned works, emergency disruptions, route changes, stop closures, and special events.
```text title="Say this or copy this prompt" theme={null}
Check for service alerts on Auckland public transport.
Fetch the alerts from: https://api.at.govt.nz/realtime/legacy/servicealerts?subscription-key=YOUR_API_KEY
Summarise all current service alerts in plain English. Group them by severity — start with the most disruptive ones.
```
**This is the most useful query for daily commuters** because it catches things that the "delays" data might not show — like a planned detour next week or a stop closure you didn't know about.
## Morning commute briefing
This is the "wow" moment — combining all three API endpoints into one personalised briefing. **Customise the details to match your actual commute.**
```text title="Say this or copy this prompt" theme={null}
I need a morning commute briefing for Auckland. I usually take the train from Britomart to Newmarket, or the bus route 70 from Queen Street. Check these three data sources:
1. Trip updates: https://api.at.govt.nz/realtime/legacy/tripupdates?subscription-key=YOUR_API_KEY
2. Service alerts: https://api.at.govt.nz/realtime/legacy/servicealerts?subscription-key=YOUR_API_KEY
3. Vehicle positions: https://api.at.govt.nz/realtime/legacy/vehiclepositions?subscription-key=YOUR_API_KEY
Give me a briefing in plain English: are my routes running on time, any alerts I should know about, and your recommendation for which route to take this morning.
```
**Customise this prompt for your actual commute.** Replace the routes and stations with your own. The more specific you are, the more useful the briefing. If you are speaking with Wispr Flow, say the description and your commute details naturally, then paste the three API URLs.
You should see something like this:
> **Your Morning Commute Briefing**
>
> **Bus Route 70: Running normally** — No delays or cancellations detected. Your departure from Queen Street should be on schedule.
>
> **Britomart to Newmarket train: Minor disruption** — There is a service alert about track maintenance between Newmarket and Remuera tonight (doesn't affect your morning commute).
>
> **Service alerts affecting you: None right now.**
>
> **Recommendation:** Take your usual bus. Everything looks clear this morning. Have a good commute!
## Compare your commute options
Can't decide between bus and train? Just ask AI to compare them for you.
```text title="Say this or copy this prompt" theme={null}
I have two ways to get to work in Auckland:
Option A: Bus route 70 from Queen Street
Option B: Train from Britomart to Newmarket
Check the real-time data for both routes:
- Trip updates: https://api.at.govt.nz/realtime/legacy/tripupdates?subscription-key=YOUR_API_KEY
- Vehicle positions: https://api.at.govt.nz/realtime/legacy/vehiclepositions?subscription-key=YOUR_API_KEY
Compare both options right now and tell me which one will get me to work faster today.
```
## Where is my bus right now?
A fun, visual query using the vehicle positions feed:
```text title="Say this or copy this prompt" theme={null}
Fetch the Auckland Transport vehicle positions from:
https://api.at.govt.nz/realtime/legacy/vehiclepositions?subscription-key=YOUR_API_KEY
Find any vehicles currently operating on route 70.
Tell me where each bus is right now, what direction it is heading, and how many buses are currently running on this route.
```
## What just happened?
```mermaid theme={null}
flowchart LR
A["You asked\na question"] --> B["Gemini fetched\nAT API data"]
B --> C["Raw GTFS data\n(hundreds of entries)"]
C --> D["Gemini filtered\nand interpreted"]
D --> E["Plain English\ncommute advice"]
```
1. **Asked** — you spoke or typed a natural-language question about your commute
2. **Fetched** — Gemini CLI used its built-in web fetch tool to call the AT API
3. **Interpreted** — the API returned raw GTFS Realtime data (JSON with hundreds of entries); Gemini filtered it for your specific routes
4. **Summarised** — Gemini translated the technical data into plain-English advice
The key insight: the AT API returns data meant for apps to consume. AI bridges the gap between raw data and human understanding. You didn't need to write any code, parse any JSON, or understand the GTFS format — you just asked a question.
## Go further — try your own questions
The prompts above are just the beginning. Here are some creative questions to show how flexible natural language is:
```text title="Say this or copy this prompt" theme={null}
Based on the trip update data, what's the average delay across all Auckland bus routes right now?
Fetch the data from: https://api.at.govt.nz/realtime/legacy/tripupdates?subscription-key=YOUR_API_KEY
```
```text title="Say this or copy this prompt" theme={null}
Are there any trains running early today? Check the trip updates and find any positive schedule deviations:
https://api.at.govt.nz/realtime/legacy/tripupdates?subscription-key=YOUR_API_KEY
```
```text title="Say this or copy this prompt" theme={null}
Give me a confidence rating from 1 to 10 on whether my bus route 70 will be on time today. Base it on the current trip updates and service alerts:
- Trip updates: https://api.at.govt.nz/realtime/legacy/tripupdates?subscription-key=YOUR_API_KEY
- Service alerts: https://api.at.govt.nz/realtime/legacy/servicealerts?subscription-key=YOUR_API_KEY
```
**This is the magic of natural language.** You do not need to memorise API endpoints or data formats — just describe what you want to know and Gemini handles the rest. If Gemini is not sure what you mean, it will ask you to clarify.
## Troubleshooting
Make sure the URL is on a single line with no line breaks. Check that `subscription-key=YOUR_API_KEY` has your actual key with no spaces around the `=` sign.
Auckland Transport updates the real-time feed based on active services. If you're checking late at night or very early morning, there may be fewer (or no) active trips. Try again during commute hours (7–9 AM or 4–6 PM).
Add this to the end of your prompt: "Explain everything in plain English. Keep it concise — no more than 10 bullet points. I am not a developer." This guides Gemini to simplify its response.
Auckland Transport route IDs in the API sometimes include a version suffix (e.g., "70-201" instead of just "70"). Ask Gemini: "List all route IDs in the data that contain the number 70" to find the exact ID.
The real-time feeds update frequently but reflect the current operational state. If services are running perfectly on time, the trip updates feed may have very few entries — it mainly reports deviations from schedule. This is normal — no news is good news.
Wispr Flow may occasionally mishear technical terms or proper nouns. You can review and correct the text in Gemini CLI before pressing Enter. If voice input is causing too many errors, switch to typing or pasting prompts instead.
Great work — you've built a real commute intelligence workflow. Head to [Keep going](/tutorial/auckland-commute/keep-going) for ideas on making this a daily habit and advanced queries.
# Keep going
Source: https://herwaka.shesharp.org.nz/tutorial/auckland-commute/keep-going
Next steps, automation ideas, and advanced prompts for your voice-first Auckland Transport commute intelligence workflow.
You built a real workflow for getting personalised commute intelligence using AI. Let's look at what you achieved and where to go next.
## What you built
```mermaid theme={null}
flowchart LR
A["Registered for\nAT API"] --> B["Installed Gemini CLI\n+ Wispr Flow"]
B --> C["Asked commute\nquestions by voice"]
C --> D["Got personalised\ncommute advice"]
```
* Registered for a free public API and learned what API keys are
* Used AI to fetch and interpret real-time transport data
* Built a morning commute briefing from multiple data sources — by speaking
* Compared commute options using natural language
* Tracked live vehicle positions across Auckland
* All for free, in under 45 minutes
## What you learned
**The skill that matters most here is knowing how to connect AI to real-world data sources.** Thousands of free APIs exist — weather, traffic, news, sports, finance. The technique you used today (give AI a URL + API key + a question) works with almost all of them. And with voice input, you can do it without touching the keyboard.
* How to register for and use a public API — a transferable skill for any data source
* How AI bridges the gap between raw data and human understanding
* How to write prompts that combine multiple data sources into one answer
* How to ask complex, multi-part questions in natural language — by voice or text
* How real-time transport data works (GTFS Realtime)
* How voice input with Wispr Flow makes the experience hands-free
## Make it a morning habit
The real power of this workflow is when it becomes part of your daily routine. Here's how to make your morning commute check take 10 seconds:
```text title="Say this or copy this prompt" theme={null}
Morning commute check. I take bus route 70 from Queen Street or the train from Britomart to Newmarket. Check these and tell me which is better today:
- Trip updates: https://api.at.govt.nz/realtime/legacy/tripupdates?subscription-key=YOUR_API_KEY
- Service alerts: https://api.at.govt.nz/realtime/legacy/servicealerts?subscription-key=YOUR_API_KEY
```
**Save this as your daily prompt.** Keep it in a text file or a note on your phone. Each morning, open your terminal, start `gemini`, and say or paste your morning check. Over time, you will have your commute briefing down to a 10-second habit.
## Ideas to try
Combine bus, train, and ferry data in one query. Just say: "What's the fastest way from Devonport to the CBD right now — ferry then walk, or bus to Britomart?"
Add weather data to your morning briefing. Say: "Check the AT API and also tell me the weather in Auckland — is it raining? Should I take the bus instead of walking to the train station?"
Create a commute briefing for your whole team. Collect everyone's routes and build a single prompt that checks all of them. Share the summary in Slack or Teams.
Before big events at Eden Park or Mt Smart, ask: "Are there extra services running for the event tonight? What's the best public transport option?"
## Advanced prompts
```text title="Say this or copy this prompt" theme={null}
Analyse the Auckland Transport service alerts and tell me which routes have the most disruptions right now.
Fetch the alerts from: https://api.at.govt.nz/realtime/legacy/servicealerts?subscription-key=YOUR_API_KEY
What are the most common causes — road works, mechanical issues, events?
Based on the data, which routes seem most reliable today?
I commute on route 70 and the train from Britomart. How are they looking?
```
```text title="Say this or copy this prompt" theme={null}
There is a big event at Eden Park tonight. Check the Auckland Transport data for any special services or route changes:
- Service alerts: https://api.at.govt.nz/realtime/legacy/servicealerts?subscription-key=YOUR_API_KEY
- Trip updates: https://api.at.govt.nz/realtime/legacy/tripupdates?subscription-key=YOUR_API_KEY
What is the best way to get to Eden Park from the CBD using public transport?
What should I expect for the journey home after the event?
```
```text title="Say this or copy this prompt" theme={null}
Check the Auckland Transport service alerts for any accessibility issues:
https://api.at.govt.nz/realtime/legacy/servicealerts?subscription-key=YOUR_API_KEY
Are there any alerts about lift outages at train stations, temporary stop relocations, or services that are not wheelchair accessible?
Summarise any accessibility-related alerts in plain English.
```
## Other APIs you can try
The same technique — give AI a URL + API key + a question — works with thousands of free APIs. Here are some relevant ones for New Zealand:
Free weather API. Combine it with AT data for weather-aware commute advice. Register at [openweathermap.org](https://openweathermap.org/).
New Zealand's open government data portal. Hundreds of free datasets on everything from census data to environmental monitoring.
## Reflect
Many people are surprised that you can speak a question and AI fetches and interprets real-time data without any coding. The API returns raw JSON designed for software to consume — but AI can read it and explain it in plain English. Adding voice input makes the experience feel like talking to a knowledgeable assistant who happens to have access to Auckland's entire transport network.
Google Maps and the AT app are polished and convenient for simple queries. The AI approach shines when you want to combine data, ask complex questions, or customise the output. Think of it as the difference between a calculator and a spreadsheet — both do maths, but one is more flexible. And with voice input, you can get answers without even looking at a screen.
The same technique works with any API — weather, news, stock prices, sports scores, government data. New Zealand has many free data sources at data.govt.nz. Once you know how to give AI a URL and ask a question, the possibilities are wide open.
## Resources
| Resource | Description | Link |
| ----------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------- |
| Auckland Transport Developer Portal | Register and manage your API key | [dev-portal.at.govt.nz](https://dev-portal.at.govt.nz/) |
| AT GTFS Realtime docs | API documentation and endpoints | [dev-portal.at.govt.nz/realtime-api](https://dev-portal.at.govt.nz/realtime-api) |
| Gemini CLI | Google's AI assistant for the terminal | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| Wispr Flow | Voice input for any application | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
| GTFS Realtime reference | Official GTFS Realtime specification | [gtfs.org/realtime](https://gtfs.org/realtime/) |
| data.govt.nz | New Zealand open government data | [data.govt.nz](https://data.govt.nz) |
Thank you for completing this tutorial! You went from zero to querying real-time transport data with AI — by voice. The ability to connect AI to any data source and ask questions in natural language is a skill that grows more valuable every day — take it with you.
# Smart Commute: Auckland Transport Real-Time Alerts
Source: https://herwaka.shesharp.org.nz/tutorial/auckland-commute/overview
Just ask 'Is my bus running late?' and AI checks the real-time data for you — get personalised commute intelligence for Auckland using voice or text. No coding required.
**Difficulty: ★★☆☆☆ Easy** · Estimated time: \~30–45 minutes
It's 7:30 AM. You're heading to work in Auckland. Is the Northern Express on time? Is there a disruption on the Western Line? You could open three different apps, scroll through alerts, and piece together an answer — or you could just say:
> "Is my bus running late? Check the Auckland Transport data and tell me."
And AI checks everything and tells you what matters, in plain English.
**That's what we're building.** A voice-first workflow where you speak a question about your commute, AI fetches real-time Auckland Transport data, and you get personalised advice — instantly.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## But first — do you even need this?
There are already some great tools for Auckland commuters. Let's be honest about them.
**Already great for most people**
"Time to leave" notifications, live traffic, crowd-sourced delay reports, and alternative route suggestions. Free, no setup required.
**The official option**
Real-time departures, boarding reminders, service disruption alerts, and route subscriptions. Free from Auckland Transport.
**Multi-modal planner**
Real-time arrivals, service alerts, trip planning across bus, train, and ferry. Free, clean interface.
**These apps are excellent.** If all you need is "when is my next bus?" then Google Maps or the AT Mobile app will serve you well. This tutorial is for people who want to go further — combining multiple data sources, asking complex questions in natural language, and building custom commute intelligence that no single app provides.
## So why use AI + the AT API?
| Capability | Google Maps / AT App | AI + AT API (this tutorial) |
| --------------------------------------------------- | --------------------- | ----------------------------------- |
| Next bus departure | Yes | Yes |
| Service alerts | Yes | Yes, with plain-English explanation |
| "Is route 62 faster than the train today?" | No | Yes — just ask |
| "Are there delays on any of my 3 commute routes?" | Check each separately | One question, one answer |
| "Give me a morning briefing for my commute" | No | Yes — say it and it happens |
| Custom logic (e.g. "only tell me if delay > 5 min") | No | Yes |
## What you will build
Register for the free Auckland Transport API and get your access key
Speak or type commute questions — Gemini CLI fetches real-time data for you
AI analyses the raw data and gives you plain-English commute advice
## How it works
```mermaid theme={null}
flowchart LR
A["You ask a\ncommute question"] --> B["Wispr Flow\nconverts to text"]
B --> C["Gemini CLI fetches\nAT API data"]
C --> D["AI interprets\nand advises"]
```
You speak a question about your commute (or type it, if you prefer). Wispr Flow converts your voice to text. Gemini CLI fetches live data from Auckland Transport's API, analyses it, and gives you a clear, actionable answer in plain English.
**You can either speak your prompts using Wispr Flow, or type/paste them into Gemini CLI. Both work exactly the same way.** Wispr Flow is optional — it just makes the experience hands-free. Every prompt in this tutorial works whether you speak it or type it.
## What you will learn
* How to register for a free public API and use an API key
* How AI can fetch and interpret real-time data from the web
* How to write prompts that combine data from multiple sources
* How to ask complex commute questions using natural language — by voice or text
* How to work with real-world transport data (GTFS Realtime format)
* How to use voice input with Wispr Flow for a hands-free workflow
**No coding required.** You will speak or paste prompts into Gemini CLI. The AI handles all the technical work — your job is to ask the right questions about your commute.
## Tools
Google's free AI assistant that runs in your terminal. It can fetch web data and interpret results.
Optional voice input tool — speak instead of type. Works in any application, including your terminal.
Free real-time data for all Auckland buses, trains, and ferries. Updated every 30 seconds.
Required to install Gemini CLI. Quick one-time setup.
The command-line app built into your computer. On macOS it is called Terminal; on Windows it is called PowerShell or Command Prompt.
## Cost
| Tool | Cost |
| ---------------------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Free (1,000 requests/day) |
| Wispr Flow | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| Auckland Transport API | Free (600 calls/min, 35,000/week) |
| Node.js | Free |
| **Total** | **\$0** |
## Prerequisites
Windows or macOS. No special hardware needed.
Take your time — there's no rush. You can pause and come back anytime.
You don't need to live in Auckland, but the data is Auckland-specific. Great for anyone who uses AT buses or trains.
Ready to get started? Head to [Set up your tools](/tutorial/auckland-commute/setup) to register your API key and install Gemini CLI.
# Set up your tools
Source: https://herwaka.shesharp.org.nz/tutorial/auckland-commute/setup
Register for the free Auckland Transport API, install Gemini CLI, and optionally set up Wispr Flow — everything you need to start querying real-time commute data by voice or text.
Before we start checking commute data, let's get your tools ready. There are three things to set up: your Auckland Transport API key (to access the data), Gemini CLI (to ask questions about it), and optionally Wispr Flow (to speak instead of type).
**You will need:** a laptop with internet access and a Google account (for Gemini CLI). No coding experience is required — we will guide you through every step.
**Already have Node.js?** If you installed it for a previous tutorial, skip this step. Run `node --version` in your terminal to check — you should see a version number like `v22.x.x`.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
**Already have Gemini CLI?** If you installed it for a previous tutorial, skip this step. Just run `gemini` in your terminal to check it still works.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
Type `/quit` to exit Gemini CLI for now. We will start it again once everything else is set up.
The Auckland Transport API gives you access to real-time data for every bus, train, and ferry in Auckland. It's free — you just need to register.
1. Go to [dev-portal.at.govt.nz](https://dev-portal.at.govt.nz/)
2. Click **Sign Up** (or **Register**) in the top-right corner
3. Fill in your name, email, and create a password
4. Check your email for a verification link and click it
5. Sign in to the developer portal
6. Once signed in, look for a **Profile** or **Subscriptions** page
7. You may need to subscribe to a product — look for **"GTFS Realtime"** or **"General Transit Feed"** and subscribe (it's free)
8. Find your **Primary Key** (also called **Subscription Key**) — it will be a long string of letters and numbers
9. **Copy this key and save it somewhere safe** — you will need it in the next section
**What is an API key?** Think of it as a library card. The Auckland Transport data is free and public, but they need to know who is using it — mainly to prevent misuse. Your key identifies you as a registered user. It doesn't cost anything and doesn't give access to your personal information.
After signing in, look for a section called **Profile**, **Subscriptions**, or **API Keys**. Some portals show the key on a "Products" page after you subscribe to a product. Try clicking on "GTFS Realtime" or "General Transit Feed" in the product list, then subscribe (free), and the key will appear.
Yes — you may need to subscribe to the **"General Transit Feed Specification (GTFS)"** product or a similarly named product. This is free. Once subscribed, your subscription key will appear on your profile page.
**Your API key is like a password.** Do not share it publicly, post it on social media, or include it in screenshots. Anyone with your key could use your quota.
Once you have subscribed to the GTFS product, your subscription key will be visible on your profile page. You need this key for every API request.
1. Go to your **Profile** page on the AT developer portal
2. Find your **Primary Key** (or **Subscription Key**)
3. Click **Show** to reveal the full key
4. Copy it and save it somewhere you can easily access — a text file, a note, or your password manager
**You will paste this key into prompts throughout the tutorial.** Every API URL includes `YOUR_API_KEY` as a placeholder — you will replace it with your actual key each time. Keep it handy.
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
Let's make sure everything works before we move on. Start Gemini CLI:
```bash theme={null}
gemini
```
Now say (with Wispr Flow) or type this prompt. **Replace `YOUR_API_KEY`** with the subscription key you saved earlier.
```text title="Say this or copy this prompt" theme={null}
Can you help me check the Auckland Transport API?
Fetch this URL and tell me what you get back:
https://api.at.govt.nz/realtime/legacy/servicealerts?subscription-key=YOUR_API_KEY
If the response contains data, summarise the first 2-3 service alerts in plain English.
If you get an error, tell me what went wrong.
```
**Replace `YOUR_API_KEY`** with your actual subscription key. If you are using Wispr Flow, speak the description part naturally, then paste the API URL with your key. Keep the key inside the URL — do not add spaces around the `=` sign.
You should see Gemini describe some current service alerts — for example, "There is a detour on route 123 due to road works near Queen Street." If you see this, your API key is working and you're ready to go.
Your API key is incorrect or hasn't been activated yet. Go back to [dev-portal.at.govt.nz](https://dev-portal.at.govt.nz/), check your profile, and copy the key again. Make sure you subscribed to the GTFS product. Some keys take a few minutes to activate after registration.
This is unlikely on your first try, but if it happens, wait 60 seconds and try again. The free tier allows 600 calls per minute, which is very generous.
The API might be returning Protocol Buffer format instead of JSON. Try asking Gemini: "Fetch this URL with the header Accept: application/json" followed by the full URL. This tells the API to return human-readable JSON format.
Make sure the entire URL is on a single line with no line breaks. Check that `subscription-key=YOUR_API_KEY` has your actual key with no spaces around the `=` sign. Also try asking Gemini to use `curl` to fetch the URL instead.
## Verify your setup
Run `node --version` in your terminal. You should see a version number.
Run `gemini` in your terminal. It starts up and shows a prompt where you can type.
You have a subscription key from dev-portal.at.govt.nz saved somewhere safe.
Gemini CLI successfully fetched and described Auckland Transport service alerts.
You can speak into your terminal and see your words appear as text.
All set? Head to [Check your commute](/tutorial/auckland-commute/check-commute) to start getting real-time commute intelligence.
# Automate your workflow
Source: https://herwaka.shesharp.org.nz/tutorial/email-to-action/automate
Turn emails into calendar events and documents — AI reads your inbox, extracts what matters, and takes action across Google apps.
Your AI tools are connected to Gmail, Calendar, and Google Docs. Now let's put them to work — read an email, create a calendar event from it, and write a summary doc. All without opening your browser.
## Read and extract from email
First, let's get AI to read an email and pull out the key information.
Make sure Gemini CLI is running in your terminal. Then say (with Wispr Flow) or type:
```text title="Say this or copy this prompt" theme={null}
Check my Gmail for the most recent email about an invoice or payment. Summarise what it says, who sent it, and what action is needed.
```
Gemini CLI will use the Gmail tools to fetch your emails, find the relevant message, and give you a structured summary.
**Gemini asks for permission?** If Gemini CLI asks to approve a tool call, type `y` and press **Enter**.
If you prefer to use `gws` directly, start by triaging your inbox:
```bash title="Copy this command" theme={null}
gws gmail +triage
```
This shows your recent emails with IDs. To read a specific message, use:
```bash title="Copy this command" theme={null}
gws gmail +read --id MESSAGE_ID
```
Replace `MESSAGE_ID` with the ID from the triage list. This displays the full email content in your terminal.
You should see something like this:
> **From:** Alex Kim ([alex.kim@company.com](mailto:alex.kim@company.com))
>
> **Subject:** Invoice #4821 — follow-up needed by Friday
>
> **Summary:** Alex is asking you to review invoice #4821 from the design contractor. The amount is \$2,400. He needs your approval before Friday so finance can process the payment before month-end.
>
> **Action needed:** Review and approve invoice #4821 by Friday.
**Replace "invoice" with any topic relevant to you.** Try "meeting", "project update", "deadline", or a specific person's name. The prompt works the same way — AI will find and summarise the most relevant email.
## Create a calendar event from the email
Now let's turn that email into a calendar event — a follow-up reminder so you don't forget.
Say or type:
```text title="Say this or copy this prompt" theme={null}
Based on that email, create a Google Calendar event for Thursday at 2 PM called "Follow up: Invoice review". Set it for 30 minutes.
```
Gemini CLI will create the event on your Google Calendar. You should see a confirmation with the event details.
```bash title="Copy this command" theme={null}
gws calendar +insert --summary "Follow up: Invoice review" --start "2026-03-26T14:00:00" --end "2026-03-26T14:30:00"
```
This creates a 30-minute event on Thursday at 2 PM. Adjust the date and time to suit your needs.
You should see a confirmation like:
> **Event created:** "Follow up: Invoice review"
>
> **When:** Thursday, 26 March 2026, 2:00 PM - 2:30 PM
>
> **Calendar:** Primary
**You just went from reading an email to scheduling a follow-up — without opening your browser.** The AI understood the context from the email and created the event for you. This is what cross-app workflows look like.
## Write a summary to Google Docs
Next, let's capture the important details in a Google Doc — so you have a written record.
Say or type:
```text title="Say this or copy this prompt" theme={null}
Create a new Google Doc called "Invoice Follow-up Notes" and write a summary of that email in it, including the key details and next steps.
```
Gemini CLI will create a new document in your Google Drive and write the summary into it.
First, create the document:
```bash title="Copy this command" theme={null}
gws docs +create --title "Invoice Follow-up Notes"
```
Then write content to it:
```bash title="Copy this command" theme={null}
gws docs +write --title "Invoice Follow-up Notes" --body "Invoice #4821 from design contractor. Amount: $2,400. Requested by Alex Kim. Action: Review and approve by Friday for month-end processing."
```
You should see a confirmation like:
> **Document created:** "Invoice Follow-up Notes"
>
> **Content written:** Summary of invoice email with key details and next steps.
>
> **Location:** Google Drive (My Drive)
**The document appears in your Google Drive.** Open [drive.google.com](https://drive.google.com) and you'll find "Invoice Follow-up Notes" in your recent files. You can share it, edit it, or add to it later.
## Upload a file to Google Drive (bonus)
You can also upload files from your computer to Google Drive — useful for attaching reports or documents to your workflow.
Say or type:
```text title="Say this or copy this prompt" theme={null}
Upload the file report.pdf from my current folder to Google Drive.
```
Gemini CLI will upload the file and confirm when it's done.
```bash title="Copy this command" theme={null}
gws drive +upload ./report.pdf --name "Q1 Report"
```
This uploads `report.pdf` from your current folder to Google Drive with the name "Q1 Report".
**No file to upload?** That's fine — skip this step. It's here to show you what's possible. You can always come back and try it later with any file on your computer.
## The complete workflow in one prompt
Here's where it all comes together. Instead of doing each step separately, give AI one instruction that triggers actions across three Google apps:
Say or type:
```text title="Say this or copy this prompt" theme={null}
Read my most recent email about the project deadline. Create a calendar event for the follow-up. Write a summary into a new Google Doc. Tell me when everything is done.
```
Gemini CLI will read the email, create the calendar event, write the doc, and report back — all from one prompt.
With direct commands, you would need to run each step separately:
```bash title="Copy these commands" theme={null}
gws gmail +triage
gws calendar +insert --summary "Project deadline follow-up" --start "2026-03-27T10:00:00" --end "2026-03-27T10:30:00"
gws docs +create --title "Project Deadline Notes"
```
This is why Gemini CLI is so powerful — it chains these steps together automatically from a single natural language instruction.
**This is the real power — one natural language instruction triggers actions across three Google apps.** You didn't write code. You didn't open any websites. You told AI what you needed, and it handled Gmail, Calendar, and Docs for you.
## What just happened?
Let's recap what you did:
1. **Read** an email — AI fetched it from Gmail and extracted the key details
2. **Created** a calendar event — a follow-up reminder based on the email content
3. **Wrote** a Google Doc — a summary with next steps for your records
4. **Uploaded** a file to Google Drive (bonus step)
5. **Combined** all three actions into a single natural language prompt
The key insight: AI can bridge multiple apps that normally require separate logins, separate tabs, and separate workflows. One instruction replaces five minutes of clicking between apps.
## Troubleshooting
Make sure your Google Calendar access is authorised. Run `gws calendar +agenda` to check — if it shows your events, the connection is working. If not, run `gws auth login -s gmail,calendar,drive,docs,sheets` to re-authorise. Also check that you gave Gemini CLI permission when it asked (type `y` and press Enter).
The document is created in your Google Drive. Open [drive.google.com](https://drive.google.com) and search for the document title. If it's not there, the Docs API may not be enabled — run `gws auth setup` to check and enable all required APIs.
Your Google authorisation may have expired or may not include all the required scopes. Exit Gemini CLI and run:
```bash theme={null}
gws auth login -s gmail,calendar,drive,docs,sheets
```
Make sure to select all permission checkboxes when the browser window opens. Then restart Gemini CLI.
Try being more specific in your prompt. Instead of "the most recent email about an invoice", try "the email from Alex about invoice 4821" or "emails from this week with the word invoice in the subject line". If your inbox is empty or has no matching emails, Gemini will tell you — try a different topic.
Some prompts may be too complex for a single pass. Break it into two prompts: first ask AI to read and summarise the email, then ask it to create the calendar event and write the doc based on that summary. This gives AI clearer context for each step.
Wispr Flow may occasionally mishear technical terms or proper nouns. You can review and correct the text in Gemini CLI before pressing Enter. If voice input is causing too many errors, switch to typing or pasting prompts instead.
Nice work — you've built a cross-app workflow that turns emails into real actions. Head to [Keep going](/tutorial/email-to-action/keep-going) for daily habit ideas and more advanced prompts.
# Keep going
Source: https://herwaka.shesharp.org.nz/tutorial/email-to-action/keep-going
More cross-app workflow ideas — turn any email into action across your Google apps.
You've built a real cross-app workflow — AI reads your email, creates calendar events, and writes documents for you. Let's look at what you achieved and where to go next.
## What you built
```mermaid theme={null}
flowchart LR
A["Email arrives"] --> B["AI extracts\nkey info"]
B --> C["Calendar event\ncreated"]
B --> D["Google Doc\nwritten"]
B --> E["File uploaded\nto Drive"]
```
* Connected AI to three Google apps — Gmail, Calendar, and Docs
* Read real emails and extracted action items, deadlines, and key details
* Created calendar events directly from email content
* Wrote email summaries to Google Docs without opening a browser
* Uploaded files to Google Drive from the command line
* Combined multiple actions into a single natural language prompt
* All for free, in under 30 minutes
## Make it a daily habit
The real power of cross-app workflows isn't a one-time task — it's using them regularly to stay on top of your work. Try these routines:
At the end of each day, say: "Check my unread emails and create calendar events for anything that needs follow-up this week." Turn emails into scheduled tasks before you log off.
After every meeting, say: "Create a Google Doc with notes from today's meeting about \[topic] and add a calendar event for the next follow-up." Capture everything while it's fresh.
Every Monday, say: "Read my emails from last week and create calendar events for any deadlines or follow-ups I need this week." Plan your week in 30 seconds.
When important emails arrive, say: "Save this email as a Google Doc for my records." Build a searchable archive of key communications.
## Try more prompts
Now that you're comfortable with cross-app workflows, try these more sophisticated prompts. Say them with Wispr Flow, type them, or paste them — they all work the same way.
```text title="Say this or copy this prompt" theme={null}
Find all emails this week with deadlines and create calendar events for each one.
```
```text title="Say this or copy this prompt" theme={null}
Read the latest email from [person's name] and draft a reply, then save it as a Google Doc.
```
```text title="Say this or copy this prompt" theme={null}
Search my emails for receipts from the last month and create a Google Doc listing each one with the date, vendor, and amount.
```
```text title="Say this or copy this prompt" theme={null}
Check my Gmail for meeting invites I haven't responded to. Create a summary doc listing each one with the date, time, and who organised it.
```
```text title="Say this or copy this prompt" theme={null}
Read all emails about [project name] from the past two weeks. Write a project status update in a new Google Doc and create a calendar event for the next milestone.
```
## Level up: From Gemini CLI to Claude Code
You have been using Gemini CLI in your terminal — speaking prompts, approving tool calls, and getting structured results across multiple apps. These are exactly the same skills used by professional developers with **Claude Code**, a more powerful CLI tool from Anthropic.
| | Gemini CLI | Claude Code |
| --------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| **What is the same** | Speak or type in the terminal. AI reads data, processes it, takes action. You approve actions. | Same workflow, same skills. |
| **What is different** | Free, great for everyday tasks | Smarter, can write and edit code, handles complex multi-step projects |
Keep building with Gemini CLI — it is free and you are learning fast. When you are ready for the next level, the [Vibe Coding tutorial](/tutorial/vibe-coding/overview) introduces Claude Code — and everything you have learned so far will transfer directly.
## Try another tutorial
Ready for your next AI-powered workflow? Try one of these:
Start your day with an AI-generated briefing — today's meetings, urgent emails, and a standup summary in one command.
Use AI to prepare for meetings — gather context from emails, docs, and calendar automatically.
Tame your inbox in seconds — AI reads and summarises your unread emails.
Generate beautiful resumes, reports, and documents with AI and Typst.
## Reflect
Many people are surprised at how seamless it feels. Instead of switching between Gmail, Calendar, and Docs — three separate apps with three separate interfaces — you gave one instruction and AI handled everything. The barrier between apps disappears when AI acts as the bridge.
Think about how much time you spend copying information between apps — reading an email, then manually creating a calendar event, then writing notes in a separate document. Cross-app workflows eliminate that repetition. Every email becomes a potential action, and AI handles the busywork.
The same approach works for Slack, Notion, Trello, spreadsheets, and more. Once you know how to describe a workflow in natural language, you can apply this skill to any combination of tools. The pattern is always the same: read data from one place, take action in another.
Try this: "Instead of reading an email, then opening Calendar to make a reminder, then opening Docs to write notes — I just tell AI to do all three at once. It reads my email, creates the event, and writes the doc. One sentence, three actions." That's the pitch.
## Resources
| Resource | Description | Link |
| -------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Google's AI assistant for the terminal | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| gws (Google Workspace CLI) | Command-line tool for Google apps | [github.com/googleworkspace/cli](https://github.com/googleworkspace/cli) |
| Claude Code | Professional AI CLI tool (your next step) | [docs.anthropic.com](https://docs.anthropic.com/en/docs/claude-code) |
| Wispr Flow | Voice input for any application | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
| Manage Google permissions | Revoke app access to your Google account | [myaccount.google.com/permissions](https://myaccount.google.com/permissions) |
| Google Calendar API | Documentation for Calendar integration | [developers.google.com/calendar](https://developers.google.com/calendar) |
| Google Docs API | Documentation for Docs integration | [developers.google.com/docs](https://developers.google.com/docs) |
Thank you for completing this tutorial! You went from reading emails manually to building cross-app workflows that turn messages into real actions. The ability to connect tools, extract information, and take action across multiple apps is a skill that makes you faster in any role — take it with you.
# Email to Action: Cross-App Workflows
Source: https://herwaka.shesharp.org.nz/tutorial/email-to-action/overview
Turn emails into calendar events and Google Docs — let AI read your inbox, extract what matters, and take action across your Google apps. No coding required.
**Difficulty: ★★★☆☆ Intermediate** · Estimated time: \~30 minutes
Your manager emails you about an invoice that needs follow-up by Friday. Normally you'd read the email, open Google Calendar to create a reminder, then open Google Docs to write up your notes. Three apps, three context switches, five minutes gone.
Instead, you tell AI to do all three at once — read the email, create the calendar event, and write the summary doc. One instruction, three actions, ten seconds.
**That's what we're building.** A workflow where AI reads your Gmail, extracts what matters, and takes action across your Google apps — Calendar, Docs, and Drive.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## What you will build
AI reads your emails and pulls out key information — who sent it, what it's about, and what action is needed
Create Google Calendar events directly from email content — follow-ups, deadlines, and reminders
Write summaries and notes to Google Docs — capture important details without opening your browser
## How it works
```mermaid theme={null}
flowchart LR
A["You speak\nor type"] --> B["Gemini CLI"]
B --> C["gws reads\nGmail"]
C --> D["gws creates\nCalendar event"]
C --> E["gws writes\nto Docs"]
```
You give one natural language instruction. Gemini CLI understands what you need, reads your Gmail using the Google Workspace CLI (`gws`), and then takes action — creating calendar events, writing documents, or uploading files. All from your terminal, all in seconds.
## What you will learn
* Build cross-app workflows that connect Gmail, Calendar, and Google Docs
* Extract action items, deadlines, and key details from emails using AI
* Create Google Calendar events from email content using natural language
* Write email summaries to Google Docs without opening a browser
* Upload files to Google Drive from the command line
* Chain multiple actions into a single AI instruction
**No coding required.** The AI handles everything — your job is to describe what you want done. If you can explain it to a colleague, you can do this.
## Tools
Google's free AI assistant that runs in your terminal. Supports extensions for Google Workspace — Gmail, Calendar, Docs, and Drive.
A command-line tool that controls your Google apps — Gmail, Calendar, Drive, Docs, Sheets — from the terminal.
Optional voice input tool — speak instead of type. Works in any application, including your terminal.
Required to install Gemini CLI and gws. A one-time setup.
## Cost
| Tool | Cost |
| ----------------------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Free (1,000 requests/day) |
| gws | Free and open-source |
| Wispr Flow | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| Node.js | Free |
| Gmail + Calendar + Docs | Free |
| **Total** | **\$0** |
## Prerequisites
Windows or macOS. No special hardware needed.
Take your time — there's no rush. You can always come back and continue later.
Any personal or work Google account with Gmail, Calendar, and Docs enabled.
Ready to get started? Head to [Set up your tools](/tutorial/email-to-action/setup) to get everything connected.
# Set up your tools
Source: https://herwaka.shesharp.org.nz/tutorial/email-to-action/setup
Install Gemini CLI and Google Workspace CLI — connect AI to your Gmail, Calendar, and Google Docs.
Before we start turning emails into actions, let's get your AI tools connected to Gmail, Calendar, and Google Docs.
**You will need:** a laptop with internet access and a Google account (Gmail + Calendar + Docs). No coding experience is required — we will guide you through every step.
**Already have Node.js?** If you installed it for a previous tutorial, skip this step. Run `node --version` in your terminal to check — you should see a version number like `v22.x.x`.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
**Already have Gemini CLI?** If you installed it for a previous tutorial, skip this step. Just run `gemini` in your terminal to check it still works.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
Type `/quit` to exit Gemini CLI for now. We will start it again after installing the Google Workspace tools.
`gws` is a command-line tool that controls all your Google apps — Gmail, Calendar, Drive, Docs, Sheets — from the terminal. It's what lets AI manage your Google Workspace without opening a browser.
Open your terminal and type:
```bash title="Copy this command" theme={null}
npm install -g @googleworkspace/cli
```
Wait for the installation to finish. Then set up your Google Cloud project:
```bash title="Copy this command" theme={null}
gws auth setup
```
**What does `gws auth setup` do?** It creates a Google Cloud project for you, enables the APIs you need, and prepares everything for sign-in. It requires the `gcloud` CLI — if you don't have it, see the troubleshooting section below.
Once setup is complete, sign in and choose which Google services to connect:
```bash title="Copy this command" theme={null}
gws auth login -s gmail,calendar,drive,docs,sheets
```
A browser window will open — sign in with your Google account and approve the permissions.
**"Google hasn't verified this app" warning:** This is normal. Click **Advanced** → **Go to \[app name] (unsafe)** to continue. This is safe for personal use — Google shows this for all apps that haven't gone through their official review process.
**Scope checkboxes:** If you see a list of permission checkboxes, select all of them (or click **Select all**) before clicking **Continue**. These are the permissions `gws` needs to read and manage your Google apps.
Verify the installation by checking today's calendar:
```bash title="Copy this command" theme={null}
gws calendar +agenda
```
You should see your upcoming events listed in your terminal. If you do, `gws` is working.
**Free to use:** `gws` is free and open-source. It connects to Google's APIs using your own Google account — there are no usage limits beyond Google's own API quotas.
The installation may not have added `gws` to your system PATH. Try closing your terminal completely and opening a new one, then run `gws --version`. If it still doesn't work, try reinstalling:
```bash theme={null}
npm install -g @googleworkspace/cli
```
`gws auth setup` uses the `gcloud` CLI to automate project creation. You have two options:
1. **Install gcloud** from [cloud.google.com/sdk/docs/install](https://cloud.google.com/sdk/docs/install), then run `gws auth setup` again
2. **Skip gcloud** — set up OAuth credentials manually in the [Google Cloud Console](https://console.cloud.google.com/). Create a project, enable the APIs you need, create an OAuth Desktop App client, download the JSON, and save it to `~/.config/gws/client_secret.json`. Then run `gws auth login`.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @googleworkspace/cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
If you see an error like "Gmail API has not been used in project...", the API needs to be enabled:
1. Look for the `enable_url` link in the error message
2. Open that link in your browser
3. Click **Enable**
4. Wait 10 seconds, then retry your command
You can also run `gws auth setup` again — it enables all required APIs automatically.
Your Google account is not listed as a test user for the OAuth app. Open the [OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent) in your Google Cloud project → **Test users** → **Add users** → enter your Google account email. Then retry `gws auth login`.
Now let's give Gemini CLI the ability to use your Google Workspace tools. Open your terminal and run:
```bash title="Copy this command" theme={null}
gemini extensions install https://github.com/googleworkspace/cli
```
This connects Gemini CLI to `gws`, so when you give a natural language instruction, Gemini can read your Gmail, create calendar events, and write to Google Docs on your behalf.
**What does this do?** It installs an extension that lets Gemini CLI call `gws` commands automatically. Instead of you typing `gws calendar +insert ...`, you can just say "Create a calendar event for Friday" and Gemini handles the rest.
Make sure you have an internet connection and that Node.js is installed correctly. Try running `node --version` first. If that works but the extension install fails, try closing and reopening your terminal, then running the command again.
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
Start Gemini CLI and try these two prompts to make sure everything is connected:
```bash title="Copy this command" theme={null}
gemini
```
Then say (with Wispr Flow) or type:
```text title="Say this or copy this prompt" theme={null}
Check my Gmail and tell me how many unread emails I have.
```
You should see Gemini CLI access your Gmail and return information about your inbox. Now try this:
```text title="Say this or copy this prompt" theme={null}
What meetings do I have today?
```
You should see your calendar events listed. If both work, everything is connected and ready.
**Gemini asks for permission?** If Gemini CLI asks to approve a tool call, type `y` and press **Enter**. This is normal — it is asking your permission before accessing your Google apps.
The extension may not have installed correctly. Try running the install command again:
```bash theme={null}
gemini extensions install https://github.com/googleworkspace/cli
```
Then exit (`/quit`) and restart Gemini CLI. You can check installed extensions with `/extensions list`.
Your Google authorisation may have expired. Exit Gemini CLI and run `gws auth login -s gmail,calendar,drive,docs,sheets` again to re-authorise. Then restart Gemini CLI.
## Verify your setup
Run `node --version` in your terminal. You should see a version number.
Run `gemini` in your terminal. It starts up and shows a prompt where you can type.
Run `gws calendar +agenda` in your terminal. You should see your upcoming calendar events.
The extension installed without errors. You can verify with `/extensions list` inside Gemini CLI.
Gemini CLI can tell you about your unread emails and today's meetings when you ask.
Both test prompts returned real results from your Gmail and Calendar.
All set? Head to [Automate your workflow](/tutorial/email-to-action/automate) to start turning emails into actions.
# Keep going
Source: https://herwaka.shesharp.org.nz/tutorial/gmail-summary/keep-going
Ideas for using AI with Gmail every day — build habits, try new prompts, and explore what else is possible.
You've built a real productivity workflow — AI reads your email so you don't have to. Let's look at what you achieved and where to go next.
## What you built
```mermaid theme={null}
flowchart LR
A["You speak\nor type"] --> B["AI reads\nyour Gmail"]
B --> C["Summarised\nwith AI"]
C --> D["Asked follow-up\nquestions"]
```
* Connected an AI assistant to a live service (Gmail) — using real credentials
* Fetched real emails from your real inbox
* Produced structured summaries in multiple formats
* Filtered by sender, topic, and date using natural language
* Asked follow-up questions to find specific information
* All for free, in under 20 minutes
## Make it a daily habit
The real power of this tool isn't a one-time summary — it's using it regularly to stay on top of your inbox. Try these routines:
Start each workday by saying "Summarise my overnight emails." Get up to speed in 30 seconds instead of 20 minutes.
Before logging off, say: "Are there any emails I received today that still need a reply?" Never miss an important response.
Every Monday, say: "Give me a summary of the past week's emails." Great for spotting patterns or threads you overlooked.
Before a meeting, say: "Summarise all emails about \[project name] from the last 2 weeks." Walk in fully prepared.
## Try more advanced prompts
Now that you're comfortable with basic summaries, try these more sophisticated prompts. Say them with Wispr Flow, type them, or paste them — they all work the same way.
```text title="Say this or copy this prompt" theme={null}
Look through my emails from the past week and list every action item
or request directed at me. Group them by urgency: urgent, this week,
and when you have time.
```
```text title="Say this or copy this prompt" theme={null}
Find the email thread with [person's name] about [topic].
Summarise the full conversation — who said what, what was agreed,
and what's still unresolved.
```
```text title="Say this or copy this prompt" theme={null}
Based on my sent emails from the past week, draft a brief status update
of what I've been working on. Group by project or topic.
```
```text title="Say this or copy this prompt" theme={null}
Check my unread emails and identify any that are asking me a question
or requesting a response. List them with the sender, subject, and
what they're asking for.
```
```text title="Say this or copy this prompt" theme={null}
Compare the emails I received this week to last week. Are there any new topics, new senders, or trends I should be aware of?
```
## Explore Gmail's built-in AI features
Gmail itself now has AI features powered by Gemini that work without any setup:
Gmail automatically shows a summary at the top of long email threads. Look for it next time you open a thread with many replies.
Click the "Summarise this email" button at the top of any email on desktop or mobile. Available to all Gmail users at no cost.
When composing an email, click "Help me write" to get AI-generated drafts based on your instructions.
Gmail suggests short replies at the bottom of emails. Tap one to reply instantly — great for quick acknowledgements.
**Best of both worlds:** Use the AI tools from this tutorial for big-picture inbox management (daily summaries, sender reports, action item extraction), and use Gmail's built-in features for quick, in-the-moment tasks (summarising a single thread, drafting a reply).
## Level up: From Gemini CLI to Claude Code
You have been using Gemini CLI in your terminal — speaking prompts, approving tool calls, and getting structured results. These are exactly the same skills used by professional developers with **Claude Code**, a more powerful CLI tool from Anthropic.
| | Gemini CLI | Claude Code |
| --------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| **What is the same** | Speak or type in the terminal. AI reads data, processes it, gives you results. You approve actions. | Same workflow, same skills. |
| **What is different** | Free, great for everyday tasks | Smarter, can write and edit code, handles complex multi-step projects |
Keep building with Gemini CLI — it is free and you are learning fast. When you are ready for the next level, the [Vibe Coding tutorial](/tutorial/vibe-coding/overview) introduces Claude Code — and everything you have learned so far will transfer directly.
## Try another tutorial
Ready for your next AI-powered workflow? Try one of these:
Same concept, different tool — catch up on any Slack channel in seconds using AI.
Use AI to create and deploy your own website — no coding experience needed.
Generate beautiful résumés, reports, and documents with AI and Typst.
Build a bot that automatically posts daily reports to Slack. A more advanced challenge.
## Reflect
Many people are surprised at how quick and simple it is. Whether you used the Gemini App (Path A) or installed Gemini CLI with voice control (Path B), the barrier to connecting AI to your everyday tools is much lower than most expect.
Think about the difference between typing a search query and simply saying what you need. Voice removes friction — you can catch up on your inbox while making coffee, preparing for a meeting, or walking to your desk. The ability to speak naturally to your tools opens up moments in the day that were previously wasted.
Think about: catching up after time off, preparing for meetings by reviewing all emails from a specific person, tracking action items across dozens of messages, or staying on top of recruiter emails during a job search. The ability to quickly extract information from your inbox is valuable in any role.
The same approach works for Slack channels, meeting transcripts, documents, news articles, and more. Once you know how to write effective prompts, you can apply this skill to any text-heavy task.
## Resources
| Resource | Description | Link |
| ------------------------------ | ----------------------------------------- | ------------------------------------------------------------------------------------------------ |
| Gemini CLI | Google's AI assistant for the terminal | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| Claude Code | Professional AI CLI tool (your next step) | [docs.anthropic.com](https://docs.anthropic.com/en/docs/claude-code) |
| Gemini App | Google's AI assistant in the browser | [gemini.google.com](https://gemini.google.com) |
| Wispr Flow | Voice input for any application | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
| Gemini CLI Workspace Extension | Gemini CLI extension for Gmail | [github.com/gemini-cli-extensions/workspace](https://github.com/gemini-cli-extensions/workspace) |
| Manage Google permissions | Revoke app access to your Gmail | [myaccount.google.com/permissions](https://myaccount.google.com/permissions) |
Thank you for completing this tutorial! You went from zero to summarising real emails with AI. The ability to connect tools, fetch data, and extract meaning from it is valuable in any role — take this skill with you.
# Summarise Gmail with AI
Source: https://herwaka.shesharp.org.nz/tutorial/gmail-summary/overview
Tame your inbox in seconds — use AI to read and summarise your unread emails, catch up on messages from specific senders, and find what matters fast. No coding required.
**Difficulty: ★☆☆☆☆ Getting Started** · Estimated time: \~5 to 20 minutes (depending on the path you choose)
You come back from a week of leave. Your inbox has 340 unread emails. There are 12 from your manager, a few newsletters you meant to cancel, three meeting invites buried somewhere in the middle, and a thread with "URGENT" in the subject that turned out to be a lunch order.
You could spend an hour scrolling, skimming, and sorting — or you could ask AI to summarise it all in 30 seconds.
**That's what we're building.** A workflow that reads your Gmail and gives you a clear, useful summary — instantly.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## What you will build
Link an AI tool to your Gmail account so it can read your emails
Pull emails — all unread, from a specific sender, or matching a search
AI reads the emails and gives you a clear, actionable summary
## Two paths to choose from
This tutorial offers two ways to achieve the same result. Pick the one that suits your situation.
**\~20 minutes** · Recommended
Install Gemini CLI, add the Google Workspace extension, and speak your prompts with Wispr Flow. A voice-first experience that builds CLI skills you will use in every tutorial after this one.
**\~5 minutes** · Quickest
Open Gemini in your browser, turn on the Gmail extension, and start asking for summaries. No installation needed — but you will not learn the CLI skills used in other tutorials.
**Which path should I choose?** We recommend the **Full Tutorial** — it teaches you CLI skills you will use in every tutorial after this one, and prepares you for professional tools like Claude Code. The Quick Preview is available if you only have 5 minutes and want to see what AI can do before committing to the full setup.
**Voice or typing — both work.** Path B is designed as voice-first using Wispr Flow, but every prompt works exactly the same if you type or paste it instead. Wispr Flow is optional — it just makes the experience hands-free.
## How it works
**Full Tutorial: Gemini CLI + Voice**
```mermaid theme={null}
flowchart LR
A["You speak"] --> B["Wispr Flow\nconverts to text"]
B --> C["Gemini CLI\nreads your emails"]
C -->|"summarises"| D["You get\na summary"]
```
**Quick Preview: Gemini App (web)**
```mermaid theme={null}
flowchart LR
A["You enable\nGmail extension"] -->|"one click"| B["Gemini reads\nyour emails"]
B -->|"summarises"| C["You get\na summary"]
```
Both paths connect an AI assistant to your Gmail account. The AI reads your emails, analyses the content, and produces a structured summary — all in seconds. The Full Tutorial adds voice input and CLI skills you will reuse in every future tutorial.
## What you will learn
* Connect an AI tool to a real service (Gmail) to access live data
* Write clear prompts that produce useful, structured email summaries
* Filter and search emails using natural language (by sender, date, topic)
* Customise summary formats for different needs (quick catch-up, executive briefing, action items)
* Ask follow-up questions about emails you haven't read
* Use voice input with Wispr Flow for a hands-free workflow (Path B)
* Work with AI as a daily productivity tool for inbox management
**No coding required.** The AI handles everything — your job is to describe what kind of summary you want. If you can explain what you need to a colleague, you can do this.
## Tools
Google's free AI assistant that runs in your terminal. Supports extensions for Google Workspace. Used in the Full Tutorial.
Optional voice input tool — speak instead of type. Works in any application, including your terminal. Used in the Full Tutorial.
Google's free AI assistant in your browser. Connect it to Gmail and chat with your inbox. Used in the Quick Preview only.
Required to install Gemini CLI. Only needed for Path B.
## Cost
| Tool | Cost |
| ---------- | ---------------------------------------------------------------------------------- |
| Gemini App | Free |
| Gemini CLI | Free (1,000 requests/day) |
| Wispr Flow | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| Node.js | Free |
| Gmail | Free |
| **Total** | **\$0** |
## Prerequisites
Windows or macOS. No special hardware needed.
Depends on the path you choose. Take your time — there's no rush.
Any personal or work Gmail account. You will give the AI read-only access to your emails.
Ready to get started? Head to [Set up your tools](/tutorial/gmail-summary/setup) to get everything connected.
# Set up your tools
Source: https://herwaka.shesharp.org.nz/tutorial/gmail-summary/setup
Connect AI to your Gmail account — install Gemini CLI + Voice (recommended) or try the quick browser preview.
Before we start summarising, let's get your AI tool connected to Gmail. Choose the path that suits you best.
**You will need:** a laptop with internet access and a Gmail account. No coding experience is required — we will guide you through every step.
## Choose your path
This path gives you a voice-first experience. You will install Gemini CLI, add the Google Workspace extension, and optionally set up Wispr Flow so you can speak your prompts. This takes about 20 minutes and teaches CLI skills you will use in every tutorial after this one.
**Already have Node.js?** If you installed it for a previous tutorial, skip this step. Run `node --version` in your terminal to check — you should see a version number like `v22.x.x`.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
**Already have Gemini CLI?** If you installed it for a previous tutorial, skip this step. Just run `gemini` in your terminal to check it still works.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
Type `/quit` to exit Gemini CLI for now. We will start it again after installing the Gmail extension.
Open your terminal and run this command:
```bash title="Copy this command" theme={null}
gemini extensions install https://github.com/gemini-cli-extensions/workspace
```
This downloads and installs the Google Workspace extension, which gives Gemini CLI the ability to read your Gmail, Google Calendar, and Google Drive.
**What is an extension?** Extensions are plugins that add new capabilities to Gemini CLI. The Workspace extension adds tools for reading and managing Google services like Gmail — similar to how you might install an app on your phone.
Make sure you have an internet connection and that Node.js is installed correctly. Try running `node --version` first. If that works but the extension install fails, try closing and reopening your terminal, then running the command again.
1. Start Gemini CLI:
```bash theme={null}
gemini
```
2. The first time Gemini CLI loads with the Workspace extension, it will ask you to authorise access to your Google account
3. A browser window will open — sign in with the Google account that has the Gmail you want to summarise
4. Review the permissions and click **Allow**
5. Return to your terminal — Gemini CLI is now connected to your Gmail
**Review the permissions carefully.** The extension requests access to read your emails, calendar, and drive. Make sure you are comfortable with this before clicking Allow. You can revoke access at any time from your [Google Account security settings](https://myaccount.google.com/permissions).
Copy the URL shown in your terminal and paste it into your browser manually. Complete the sign-in there, then return to the terminal.
This is normal for community-built tools. Click **Advanced** → **Go to \[app name] (unsafe)** to continue. Google shows this warning for apps that haven't gone through their official review process.
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
In Gemini CLI, say (with Wispr Flow) or type this prompt:
```text title="Say this or copy this prompt" theme={null}
Check my Gmail and tell me how many unread emails I have.
```
You should see Gemini CLI access your Gmail and return information about your inbox. If it does, everything is working.
**Gemini asks for permission?** If Gemini CLI asks to approve a tool call, type `y` and press **Enter**. This is normal — it is asking your permission before accessing Gmail.
The extension may not have installed correctly. Try running the install command again:
```bash theme={null}
gemini extensions install https://github.com/gemini-cli-extensions/workspace
```
Then exit (`/quit`) and restart Gemini CLI. You can check installed extensions with `/extensions list`.
## Verify your setup
Run `node --version` in your terminal. You should see a version number.
Run `gemini` in your terminal. It starts up and shows a prompt where you can type.
The extension installed without errors. You can verify with `/extensions list` inside Gemini CLI.
You completed the Google sign-in and granted access.
Gemini CLI can tell you about your unread emails when you ask.
All set? Head to [Summarise your Gmail](/tutorial/gmail-summary/summarize) to get your first AI-powered email summary.
**This is a quick preview.** You will get results fast, but you will not learn the CLI skills used in every other tutorial. If you have 20 minutes, we recommend the **Full Tutorial (CLI + Voice)** tab instead.
This is the fastest way to get started. You will use the Gemini web app in your browser, turn on the Gmail extension, and be ready to summarise in about 5 minutes. No installation required.
1. Go to [gemini.google.com](https://gemini.google.com) in your browser
2. Sign in with the Google account that has the Gmail you want to summarise
3. You should see the Gemini chat interface
You need a Google account to use both Gemini and Gmail. Go to [accounts.google.com](https://accounts.google.com) and click **Create account** to make one for free.
1. Click the **Settings** icon (gear icon) in the bottom-left of the Gemini sidebar, or go to [gemini.google.com/extensions](https://gemini.google.com/extensions)
2. Find **Google Workspace** in the list of extensions
3. Toggle it **on**
4. If prompted, review the permissions and click **Allow**
**What does this do?** It gives Gemini permission to read your Gmail messages, Google Drive files, and Google Docs. Gemini uses this access only when you ask it to — it does not read your emails in the background.
The extension may not be available if your Google account is managed by an organisation (like a school or employer). Your admin may need to enable it. Try using a personal Gmail account instead.
Make sure you are signed in with a Google account that has Gmail enabled. If you are using a Workspace account, check with your IT admin — they may need to enable Gemini extensions in the Admin console.
In the Gemini chat, type this prompt:
```text title="Copy this prompt" theme={null}
Check my Gmail and tell me how many unread emails I have.
```
You should see Gemini access your Gmail and return a count of your unread messages. If it does, the connection is working.
**First time?** Gemini may ask you to confirm that it can access your Gmail. Click **Allow** or **Yes** when prompted. This is a one-time authorisation.
## Verify your setup
You can see the Gemini chat interface at gemini.google.com.
The Google Workspace extension is toggled on in Settings → Extensions.
Gemini can tell you how many unread emails you have.
All set? Head to [Summarise your Gmail](/tutorial/gmail-summary/summarize) to get your first AI-powered email summary.
# Summarise your Gmail
Source: https://herwaka.shesharp.org.nz/tutorial/gmail-summary/summarize
Ask AI to read your emails and create clear, useful summaries — catch up on unread messages, filter by sender, and try different summary styles.
Your AI tool is connected to Gmail. Now let's put it to work — ask it to read your inbox and give you a summary you can actually use.
## Get your first summary
Make sure Gemini CLI is running in your terminal. Then say (with Wispr Flow) or type this prompt:
```text title="Say this or copy this prompt" theme={null}
Check my Gmail and summarise all my unread emails. Include the main topics, any action items I need to take, and flag anything urgent.
```
Gemini CLI will use the Gmail tools to fetch your emails and return a structured summary.
**Gemini asks for permission?** If Gemini CLI asks to approve a tool call, type `y` and press **Enter**.
**Voice or typing — both work.** If you have Wispr Flow running, just start speaking. Otherwise, copy and paste the prompt or type your own request. Gemini understands natural language either way.
Open [gemini.google.com](https://gemini.google.com) and paste this prompt:
```text title="Copy this prompt" theme={null}
Check my Gmail and summarise all my unread emails.
For each email, include:
- Who it's from
- The subject line
- A one-sentence summary of what it says
- Whether it needs a reply (yes / no / not sure)
Group them by importance: urgent first, then informational, then newsletters or promotions.
```
Within a few seconds, Gemini will read your inbox and return a structured summary.
**First time?** Gemini may ask you to confirm Gmail access. Click **Allow** when prompted.
You should see a summary that looks something like this:
> **Unread emails (12 total):**
>
> **Urgent**
>
> * **Sarah Chen** — "Budget approval needed" — Asking for sign-off on Q2 budget by Wednesday. *Needs reply: yes*
> * **IT Support** — "Password expiry reminder" — Your password expires in 3 days. *Needs reply: no (action needed)*
>
> **Informational**
>
> * **Project Team** — "Sprint review notes" — Summary of last week's sprint. 3 action items assigned to you. *Needs reply: not sure*
> * **HR** — "Updated leave policy" — New guidelines for annual leave requests. *Needs reply: no*
>
> **Newsletters & Promotions**
>
> * **LinkedIn News** — "This week in tech" — Weekly industry roundup. *Needs reply: no*
> * **Coursera** — "New courses for you" — Course recommendations based on your profile. *Needs reply: no*
That's it — you just caught up on your entire inbox in seconds.
## Filter by sender
Want to see everything from a specific person? Try this prompt.
```text title="Say this or copy this prompt" theme={null}
Find all emails from [person's name] in the last 30 days and give me a summary of what they've been writing about.
```
```text title="Copy this prompt — replace the name" theme={null}
Find all emails from [person's name or email address] in the last 30 days
and summarise them.
Include:
- The date of each email
- The subject line
- A brief summary of what they said or asked
- Any action items or requests directed at me
Put the most recent emails first.
```
**This is incredibly useful for catching up before meetings.** If you're about to meet with someone, ask AI to summarise all recent emails from them. You'll walk in fully prepared.
## Try different summary styles
The first summary is a great start. But depending on your situation, you might want a different format. Try these styles.
```text title="Say this or copy this prompt" theme={null}
Give me a quick casual catch-up on my unread emails, like a colleague filling me in over coffee. Keep it to five sentences maximum.
```
```text title="Copy this prompt" theme={null}
Summarise my unread emails as a quick catch-up for someone who's been
away for a few days.
Write it in a casual, friendly tone — like a colleague filling me in
over coffee. Keep it to 5 sentences maximum.
```
```text title="Say this or copy this prompt" theme={null}
Summarise my unread emails as a professional executive briefing I could forward to my manager. Include key decisions needed, action items with deadlines, and any risks.
```
```text title="Copy this prompt" theme={null}
Summarise my unread emails as a professional executive briefing.
Include:
- Date range covered
- Key decisions or approvals needed
- Action items with deadlines (if mentioned)
- Risks or escalations
Format it as a document I could forward to my manager.
```
```text title="Say this or copy this prompt" theme={null}
Go through my Gmail and extract only action items — things people are asking me to do or deadlines I need to meet. Ignore newsletters and promotions.
```
```text title="Copy this prompt" theme={null}
Read my unread emails and extract only the action items —
things I need to do, respond to, or follow up on.
Ignore newsletters, promotions, and informational emails.
List each action item as a bullet point with the sender's name
and the deadline (if mentioned).
```
```text title="Say this or copy this prompt" theme={null}
Check my Gmail for any meeting invitations I haven't responded to. List the date, time, and topic for each one.
```
```text title="Copy this prompt" theme={null}
Check my Gmail for any meeting invitations or calendar-related emails.
List the date, time, topic, and organiser for each.
Tell me which ones I haven't responded to yet.
```
```text title="Say this or copy this prompt" theme={null}
Search my emails for anything related to [topic or project name] and summarise what's been discussed, what was decided, and what's still pending.
```
```text title="Copy this prompt — replace the topic" theme={null}
Search my recent emails for anything related to [topic or project name].
Summarise what's been discussed, any decisions made, and what's
still pending. Include who's involved in each thread.
```
**The key skill here is prompt writing.** Notice how each prompt tells the AI exactly what format you want, what to include, and what to leave out. The more specific your instructions, the more useful the summary.
## Go further
Once you're comfortable with the basics, try these creative prompts. They work with both paths — say them with Wispr Flow, type them, or paste them.
```text title="Say this or copy this prompt" theme={null}
Are there any emails I haven't replied to that are more than 3 days old?
```
```text title="Say this or copy this prompt" theme={null}
Summarise all newsletters I received this week.
```
```text title="Say this or copy this prompt" theme={null}
Find emails with attachments and list what was attached.
```
```text title="Say this or copy this prompt" theme={null}
Find all emails from [person's name] and draft a quick reply to their most recent one.
```
```text title="Say this or copy this prompt" theme={null}
Which emails this week mentioned a deadline? List the deadline and who set it.
```
**This is the magic of natural language.** You do not need to memorise commands or search syntax — just describe what you want. If the AI is not sure what you mean, it will ask you to clarify.
## Ask follow-up questions
The AI remembers the emails it just read. You can ask follow-up questions without fetching the emails again. Try any of these:
```text title="Say this or copy this prompt" theme={null}
Were there any emails about [topic]?
```
```text title="Say this or copy this prompt" theme={null}
Which emails had attachments? List the sender, subject, and what the attachment seems to be.
```
```text title="Say this or copy this prompt" theme={null}
Summarise only emails from the last 24 hours.
```
```text title="Say this or copy this prompt" theme={null}
Draft a short, professional reply to [sender's name]'s email about [topic].
```
**This is where AI really shines.** Instead of scrolling through hundreds of emails looking for one piece of information, you can just ask. "Did anyone send me a PDF this week?" is much faster than checking every email yourself.
## Save your summary
Want to keep a copy of your summary? Here's how.
Ask Gemini CLI to save it to a file:
```text title="Say this or copy this prompt" theme={null}
Save that summary to a file called email-summary.txt in the current folder.
```
The summary is now saved as a text file on your computer.
* **Copy and paste:** Select the summary text and paste it into a document, email, or notes app
* **Share:** Click the **share** icon on Gemini's response to get a shareable link
## What just happened?
Let's recap what you did:
1. **Connected** an AI tool to your Gmail account
2. **Fetched** your unread emails — the AI handled this automatically
3. **Summarised** your inbox in a structured, useful format
4. **Filtered** by sender to see emails from a specific person
5. **Customised** the summary style to match your needs
6. **Asked follow-up questions** to find specific information
The key insight: AI is excellent at reading large amounts of text and extracting what matters. A task that would take you 20 minutes of scrolling took the AI about 10 seconds.
## Troubleshooting
Go to [gemini.google.com/extensions](https://gemini.google.com/extensions) and check that the Google Workspace extension is toggled on. If it shows an error, toggle it off and on again. Make sure you are signed in with the correct Google account.
Check that the Workspace extension is installed by typing `/extensions list` in Gemini CLI. If it's not listed, run the install command again:
```bash theme={null}
gemini extensions install https://github.com/gemini-cli-extensions/workspace
```
Then exit (`/quit`) and restart Gemini CLI.
Your inbox might not have enough unread emails. Try asking for a broader search: "Summarise all emails from the last 7 days" instead of just unread ones. You can also be more specific: "Summarise the 20 most recent emails."
By default, the AI may only fetch the most recent messages. Ask it to go further back: "Read all emails from the last 30 days and summarise them" or "Find the last 50 emails and give me a summary."
Your Gmail authorisation may have expired. Try these steps:
* **Gemini App:** Toggle the Workspace extension off and on again in Settings → Extensions
* **Gemini CLI:** Exit and restart Gemini CLI — it should prompt you to re-authorise
Add filtering instructions to your prompt. For example: "Ignore promotional emails and newsletters", "Only include emails from real people, not automated systems", or "Focus on emails related to \[project name]."
Wispr Flow may occasionally mishear technical terms or proper nouns. You can review and correct the text in Gemini CLI before pressing Enter. If voice input is causing too many errors, switch to typing or pasting prompts instead.
Nice work — you've built a real productivity workflow for your inbox. Head to [Keep going](/tutorial/gmail-summary/keep-going) for ideas on how to use this every day.
# Keep going
Source: https://herwaka.shesharp.org.nz/tutorial/meeting-prep/keep-going
Make meeting prep a habit — try new prompts, automate your routine, and never walk into a meeting unprepared again.
You've built a real productivity workflow — AI reads your calendar, emails, and documents so you walk into every meeting fully prepared. Let's look at what you achieved and where to go next.
## What you built
```mermaid theme={null}
flowchart LR
A["Calendar +\nGmail + Drive"] --> B["AI\nsynthesises"]
B --> C["Meeting\nbriefing"]
C --> D["You're\nprepared"]
```
* Connected AI to three Google services at once — Calendar, Gmail, and Drive
* Pulled meeting details, related emails, and shared documents with natural language
* Combined multiple data sources into a single, structured briefing
* Read spreadsheet data to review numbers before a meeting
* Saved your briefing as a file or Google Doc for easy reference
* All for free, in under 30 minutes
## Make it a daily habit
The real power of meeting prep isn't a one-time briefing — it's using it before every meeting so you're always the most prepared person in the room.
Start each workday by saying "Prep me for all my meetings today." Get a briefing for every meeting on your calendar in one go.
15 minutes before any meeting, run a quick meeting prep. One prompt, one briefing — walk in knowing the context, the people, and the key points.
After a meeting, say "Save my meeting notes to a Google Doc." Capture decisions, action items, and follow-ups while they're fresh.
Every Friday, say "Summarise all my meetings this week and list any follow-ups I still need to do." Stay on top of everything.
## Try more prompts
Now that you're comfortable with meeting prep, try these more creative prompts. Say them with Wispr Flow, type them, or paste them — they all work the same way.
```text title="Say this or copy this prompt" theme={null}
Prep me for all my meetings today in one go. For each meeting, give me the attendees, key context from recent emails, and one talking point.
```
```text title="Say this or copy this prompt" theme={null}
Find the last 3 documents that Sarah Chen shared with me. Summarise what each one is about.
```
```text title="Say this or copy this prompt" theme={null}
What are the key decisions from my meetings this week? List the decision, who made it, and any follow-up actions.
```
```text title="Say this or copy this prompt" theme={null}
Draft an agenda for my meeting with Marcus Lee based on our recent email thread. Include discussion topics and time estimates.
```
```text title="Say this or copy this prompt" theme={null}
I have a meeting with a new client tomorrow. Search my email and Drive for anything related to their company and give me a background briefing.
```
**The more you use this, the faster it gets.** You will develop your own go-to prompts — the ones that match how you work and what meetings you have. Save your favourite prompts in a note so you can reuse them.
## Level up: From Gemini CLI to Claude Code
You have been using Gemini CLI in your terminal — speaking prompts, approving tool calls, and getting structured results. These are exactly the same skills used by professional developers with **Claude Code**, a more powerful CLI tool from Anthropic.
| | Gemini CLI | Claude Code |
| --------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| **What is the same** | Speak or type in the terminal. AI reads data, processes it, gives you results. You approve actions. | Same workflow, same skills. |
| **What is different** | Free, great for everyday tasks | Smarter, can write and edit code, handles complex multi-step projects |
Keep building with Gemini CLI — it is free and you are learning fast. When you are ready for the next level, the [Vibe Coding tutorial](/tutorial/vibe-coding/overview) introduces Claude Code — and everything you have learned so far will transfer directly.
## Try another tutorial
Ready for your next AI-powered workflow? Try one of these:
Start your day with a complete briefing — today's meetings, urgent emails, and a standup summary, all from one command.
Turn a messy inbox into a clean to-do list — AI extracts action items, deadlines, and follow-ups from your emails.
Tame your inbox in seconds — AI reads and summarises your unread emails so you can catch up instantly.
Same concept, different tool — catch up on any Slack channel in seconds using AI.
## Reflect
Most people are surprised at how seamlessly AI combines Calendar, Gmail, and Drive into one briefing. Instead of opening three tabs and piecing together context manually, you get a complete picture from a single prompt. The ability to cross-reference data from different services is where AI really shines.
Think about the difference between walking into a meeting cold and walking in with a briefing. You know the agenda, the recent discussions, the shared documents, and the key points. That preparation builds confidence and helps you contribute more effectively — whether you're presenting, listening, or making decisions.
The same approach — gather data, synthesise, and brief — works for client research, project updates, weekly reports, and more. Once you know how to prompt AI to pull from multiple sources, you can apply this skill to any situation where you need to get up to speed quickly.
Think about Google Docs with meeting notes, Sheets with project data, Slides with presentations, or even Google Chat messages. The `gws` tool can access all of these. The more data sources you connect, the more complete your briefings become.
## Resources
| Resource | Description | Link |
| -------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Google's AI assistant for the terminal | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| gws (Google Workspace CLI) | Command-line tool for Google Workspace | [github.com/googleworkspace/cli](https://github.com/googleworkspace/cli) |
| Claude Code | Professional AI CLI tool (your next step) | [docs.anthropic.com](https://docs.anthropic.com/en/docs/claude-code) |
| Wispr Flow | Voice input for any application | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
| Google Calendar | Manage your schedule | [calendar.google.com](https://calendar.google.com) |
| Manage Google permissions | Revoke app access to your Google data | [myaccount.google.com/permissions](https://myaccount.google.com/permissions) |
Thank you for completing this tutorial! You went from frantically searching for meeting context to getting a complete briefing in 60 seconds. The ability to gather information from multiple sources and synthesise it with AI is a skill that makes you more effective in every meeting — take it with you.
# Meeting Prep with AI
Source: https://herwaka.shesharp.org.nz/tutorial/meeting-prep/overview
Never walk into a meeting unprepared — AI gathers your calendar agenda, related emails, and shared documents into a single briefing. No coding required.
**Difficulty: ★★☆☆☆ Easy** · Estimated time: \~25 to 30 minutes
Your client meeting starts in 30 minutes. You vaguely remember emails about the project, but you can't find them. There was a shared doc somewhere — maybe in Drive, maybe attached to an email thread you archived weeks ago. You could spend 20 minutes frantically searching Gmail and Drive, or you could ask AI to prep you in 60 seconds.
**That's what we're building.** A workflow that reads your Google Calendar, pulls related emails from Gmail, finds shared documents in Drive, and delivers a complete meeting briefing — all from a single prompt.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## What you will build
AI finds your meeting details, related emails, and shared documents across Calendar, Gmail, and Drive
Combines everything into a one-page briefing — no more switching between tabs
Key points, attendee list, and talking suggestions ready to go before you walk in
## How it works
```mermaid theme={null}
flowchart LR
A["You speak\nor type"] --> B["Gemini CLI"]
B --> C["gws reads\nCalendar + Gmail + Drive"]
C -->|"synthesises"| D["One-page\nmeeting briefing"]
```
You speak (or type) a single prompt. Gemini CLI uses the Google Workspace CLI (`gws`) to pull your calendar events, search your emails, and find shared documents. AI combines everything into a clear, structured briefing you can read in 60 seconds.
## What you will learn
* Connect AI to your Google Calendar, Gmail, and Drive using `gws`
* Pull meeting details — time, attendees, agenda — with a natural language prompt
* Search Gmail for emails related to a specific meeting or attendee
* Find shared documents in Google Drive by topic or file name
* Combine multiple data sources into a single AI-powered briefing
* Save your briefing as a file or Google Doc for easy reference
**No coding required.** The AI handles everything — your job is to describe what meeting you need to prepare for. If you can explain what you need to a colleague, you can do this.
## Tools
Google's free AI assistant that runs in your terminal. Supports extensions for Google Workspace — reads your calendar, email, and drive on command.
A command-line tool that controls Gmail, Calendar, Drive, and more from your terminal. It's what lets AI access your Google data.
Optional voice input tool — speak instead of type. Works in any application, including your terminal. Hands-free meeting prep.
Required to install Gemini CLI and gws. A one-time setup step.
## Cost
| Tool | Cost |
| ---------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Free (1,000 requests/day) |
| gws | Free and open-source |
| Wispr Flow | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| Node.js | Free |
| **Total** | **\$0** |
## Prerequisites
Windows or macOS. No special hardware needed.
Most of that is one-time setup. Take your time — there's no rush.
Any personal or work Google account with Calendar, Gmail, and Drive enabled.
Ready to get started? Head to [Set up your tools](/tutorial/meeting-prep/setup) to get everything connected.
# Prepare for your meeting
Source: https://herwaka.shesharp.org.nz/tutorial/meeting-prep/prepare
AI gathers your calendar, emails, and documents — get a complete meeting briefing in seconds.
Your AI tools are connected to Calendar, Gmail, and Drive. Now let's put them to work — ask AI to gather everything you need for your next meeting and deliver a complete briefing.
## Find your next meeting
Make sure Gemini CLI is running in your terminal. Then say (with Wispr Flow) or type this prompt:
```text title="Say this or copy this prompt" theme={null}
What is my next meeting? Tell me the title, time, attendees, and any description or agenda attached.
```
Gemini CLI will use `gws` to pull your calendar and return the meeting details.
**Gemini asks for permission?** If Gemini CLI asks to approve a tool call, type `y` and press **Enter**.
You can also use `gws` directly in your terminal to check your calendar:
```bash title="Copy this command" theme={null}
gws calendar +agenda
```
This shows your upcoming events with titles, times, and attendees.
You should see something like this:
> **Next meeting:**
>
> * **Title:** Q2 Planning Review
> * **Time:** Today, 2:00 PM - 3:00 PM
> * **Attendees:** Sarah Chen, Marcus Lee, Priya Patel
> * **Description:** Review Q2 progress, discuss budget adjustments, and align on next steps for the product launch.
**gws reads your calendar and shows you everything you need at a glance.** No more opening Google Calendar in a browser and clicking through events — one prompt gives you the full picture.
## Find related emails
```text title="Say this or copy this prompt" theme={null}
Search my Gmail for any emails related to Q2 Planning from the last 2 weeks. Summarise what was discussed.
```
**Replace the topic.** Swap "Q2 Planning" with your actual meeting topic or an attendee's name. The more specific you are, the better the results.
```bash title="Copy this command" theme={null}
gws gmail messages list --params '{"q": "Q2 Planning newer_than:14d"}'
```
Replace `Q2 Planning` with your meeting topic. This searches your Gmail for matching emails from the last 14 days.
You should see something like this:
> **Related emails (5 found):**
>
> * **Sarah Chen** (3 days ago) — "Q2 budget draft attached" — Shared an updated budget spreadsheet and asked for feedback by Friday.
> * **Marcus Lee** (5 days ago) — "Product launch timeline" — Proposed pushing the launch to mid-June. Waiting for approval.
> * **Priya Patel** (1 week ago) — "Re: Q2 Planning agenda" — Suggested adding a 10-minute slot for customer feedback review.
> * **Sarah Chen** (10 days ago) — "Q2 goals alignment" — Outlined three priority areas for the quarter.
> * **Marcus Lee** (12 days ago) — "Design review notes" — Shared notes from the design review. Two action items assigned to you.
**This is incredibly useful for catching up before meetings.** Instead of searching Gmail manually and opening emails one by one, AI reads them all and gives you the key points in seconds.
## Find shared documents
```text title="Say this or copy this prompt" theme={null}
Search my Google Drive for files related to Q2 Planning. List the file names, who shared them, and when they were last modified.
```
```bash title="Copy this command" theme={null}
gws drive files list --params '{"q": "name contains \"Q2 Planning\""}'
```
Replace `Q2 Planning` with your meeting topic. This searches your Google Drive for matching files.
You should see something like this:
> **Related files in Drive (3 found):**
>
> * **Q2 Budget Draft.xlsx** — Shared by Sarah Chen, last modified 3 days ago
> * **Q2 Planning Agenda.gdoc** — Shared by Priya Patel, last modified 1 week ago
> * **Product Launch Timeline.gsheet** — Shared by Marcus Lee, last modified 5 days ago
**Now you know exactly which documents to open before the meeting.** No more digging through Drive folders — AI finds the relevant files and tells you who shared them and when.
## Read data from a spreadsheet (optional)
If your meeting involves reviewing numbers in a shared spreadsheet, AI can read it for you.
```text title="Say this or copy this prompt" theme={null}
Read the data from my spreadsheet called "Q2 Budget Draft" and summarise the key numbers.
```
```bash title="Copy this command" theme={null}
gws sheets +read --spreadsheet SPREADSHEET_ID --range "Sheet1!A1:D10"
```
Replace `SPREADSHEET_ID` with the actual spreadsheet ID from the file's URL. The range `Sheet1!A1:D10` pulls the first 10 rows — adjust as needed.
**Useful if your meeting involves reviewing data in a shared spreadsheet.** AI reads the numbers and summarises the key takeaways — so you walk in knowing the data, not scrambling to open the file.
## The complete meeting prep — one prompt
Here's where it all comes together. Instead of running separate queries, ask AI to do everything at once.
```text title="Say this or copy this prompt" theme={null}
I have a meeting about Q2 Planning coming up. Prep me: find the meeting details from my calendar, search my emails for related discussions, check my Drive for shared documents, and give me a one-page briefing with key points and talking suggestions.
```
For the all-in-one approach, Gemini CLI is the way to go — it combines multiple `gws` commands and synthesises the results. But you can run the individual commands in sequence:
```bash title="Copy these commands" theme={null}
gws calendar +agenda
gws gmail messages list --params '{"q": "Q2 Planning newer_than:14d"}'
gws drive files list --params '{"q": "name contains \"Q2 Planning\""}'
```
**This is the magic — AI acts as your research assistant, pulling from Calendar, Gmail, and Drive simultaneously.** One prompt, one briefing, and you're ready for the meeting.
You should see a complete briefing like this:
> **Meeting Briefing: Q2 Planning Review**
>
> **When:** Today, 2:00 PM - 3:00 PM
> **Attendees:** Sarah Chen, Marcus Lee, Priya Patel
>
> **Key context from recent emails:**
>
> * Sarah shared an updated Q2 budget draft — she's asking for feedback by Friday
> * Marcus proposed pushing the product launch to mid-June — still waiting for approval
> * Priya suggested adding customer feedback review to the agenda
> * You have 2 open action items from the design review notes
>
> **Shared documents to review:**
>
> * Q2 Budget Draft.xlsx (Sarah Chen, updated 3 days ago)
> * Q2 Planning Agenda.gdoc (Priya Patel, updated 1 week ago)
> * Product Launch Timeline.gsheet (Marcus Lee, updated 5 days ago)
>
> **Suggested talking points:**
>
> 1. Review and approve the Q2 budget draft
> 2. Decide on the product launch timeline (mid-June vs. original date)
> 3. Discuss customer feedback review process
> 4. Address your open action items from the design review
## Auto-generate meeting prep
`gws` has a built-in meeting prep workflow that does all of this automatically.
```text title="Say this or copy this prompt" theme={null}
Use the meeting prep workflow to prepare me for my next meeting.
```
```bash title="Copy this command" theme={null}
gws workflow +meeting-prep
```
This runs the full meeting prep pipeline — calendar lookup, email search, drive search, and briefing generation — in one command.
**The fastest option.** The built-in workflow handles everything automatically. Use this when you want a quick briefing without customising the prompts.
## Save your briefing
Want to keep a copy of your briefing? Here's how.
Ask Gemini CLI to save the briefing to a text file:
```text title="Say this or copy this prompt" theme={null}
Save that briefing to a file called meeting-prep.txt in the current folder.
```
The briefing is now saved on your computer. You can open it, print it, or share it.
Ask Gemini CLI to create a Google Doc with the briefing:
```text title="Say this or copy this prompt" theme={null}
Create a Google Doc called "Meeting Prep - Q2 Planning Review" and paste the briefing into it.
```
Now your briefing is in Google Docs — accessible from any device and easy to share with colleagues.
## Troubleshooting
Make sure you have events on your Google Calendar. Try asking for a broader range: "What meetings do I have this week?" instead of "What is my next meeting?" If your calendar is empty, create a test event and try again.
Your Drive may not have files matching the search term. Try a broader search: "List my 10 most recently modified files in Drive" to confirm Drive access is working. Then refine your search with a more specific term.
You need access to the spreadsheet to read its data. Make sure the file is shared with your Google account. If the file belongs to someone else, ask them to share it with you. You can also try opening the spreadsheet in your browser first to confirm access.
The `gws workflow +meeting-prep` command requires `gws` to be properly authenticated with Calendar, Gmail, and Drive. Run `gws auth login -s gmail,calendar,drive,docs,sheets` to re-authenticate. If the workflow still fails, use the individual prompts in Gemini CLI instead — they achieve the same result.
The extension may not have installed correctly. Try running the install command again:
```bash theme={null}
gemini extensions install https://github.com/googleworkspace/cli
```
Then exit (`/quit`) and restart Gemini CLI. You can check installed extensions with `/extensions list`.
Be more specific in your prompt. Instead of "prep me for my next meeting," try "prep me for my Q2 Planning Review at 2 PM — search for emails from Sarah Chen, Marcus Lee, and Priya Patel from the last 2 weeks." The more detail you give, the better the briefing.
Nice work — you've built a complete meeting prep workflow. Head to [Keep going](/tutorial/meeting-prep/keep-going) for ideas on making this a daily habit.
# Set up your tools
Source: https://herwaka.shesharp.org.nz/tutorial/meeting-prep/setup
Install Gemini CLI and Google Workspace CLI — connect AI to your Google Calendar, Gmail, and Drive.
Before we start prepping for meetings, let's get your AI tools connected to Google Calendar, Gmail, and Drive.
**You will need:** a laptop with internet access and a Google account with Calendar, Gmail, and Drive. No coding experience is required — we will guide you through every step.
**Already have Node.js?** If you installed it for a previous tutorial, skip this step. Run `node --version` in your terminal to check — you should see a version number like `v22.x.x`.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
**Already have Gemini CLI?** If you installed it for a previous tutorial, skip this step. Just run `gemini` in your terminal to check it still works.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
Type `/quit` to exit Gemini CLI for now. We will start it again after installing the Google Workspace CLI.
`gws` is a command-line tool that controls all your Google apps — Gmail, Calendar, Drive, Docs, Sheets — from the terminal. It's what lets AI manage your Google Workspace without opening a browser.
Open your terminal and type:
```bash title="Copy this command" theme={null}
npm install -g @googleworkspace/cli
```
Wait for the installation to finish. Then set up your Google Cloud project:
```bash title="Copy this command" theme={null}
gws auth setup
```
**What does `gws auth setup` do?** It creates a Google Cloud project for you, enables the APIs you need, and prepares everything for sign-in. It requires the `gcloud` CLI — if you don't have it, see the troubleshooting section below.
Once setup is complete, sign in and choose which Google services to connect:
```bash title="Copy this command" theme={null}
gws auth login -s gmail,calendar,drive,docs,sheets
```
A browser window will open — sign in with your Google account and approve the permissions.
**"Google hasn't verified this app" warning:** This is normal. Click **Advanced** → **Go to \[app name] (unsafe)** to continue. This is safe for personal use — Google shows this for all apps that haven't gone through their official review process.
**Scope checkboxes:** If you see a list of permission checkboxes, select all of them (or click **Select all**) before clicking **Continue**. These are the permissions `gws` needs to read and manage your Google apps.
Verify the installation by checking today's calendar:
```bash title="Copy this command" theme={null}
gws calendar +agenda
```
You should see your upcoming events listed in your terminal. If you do, `gws` is working.
**Free to use:** `gws` is free and open-source. It connects to Google's APIs using your own Google account — there are no usage limits beyond Google's own API quotas.
The installation may not have added `gws` to your system PATH. Try closing your terminal completely and opening a new one, then run `gws --version`. If it still doesn't work, try reinstalling:
```bash theme={null}
npm install -g @googleworkspace/cli
```
`gws auth setup` uses the `gcloud` CLI to automate project creation. You have two options:
1. **Install gcloud** from [cloud.google.com/sdk/docs/install](https://cloud.google.com/sdk/docs/install), then run `gws auth setup` again
2. **Skip gcloud** — set up OAuth credentials manually in the [Google Cloud Console](https://console.cloud.google.com/). Create a project, enable the APIs you need, create an OAuth Desktop App client, download the JSON, and save it to `~/.config/gws/client_secret.json`. Then run `gws auth login`.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @googleworkspace/cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
If you see an error like "Gmail API has not been used in project...", the API needs to be enabled:
1. Look for the `enable_url` link in the error message
2. Open that link in your browser
3. Click **Enable**
4. Wait 10 seconds, then retry your command
You can also run `gws auth setup` again — it enables all required APIs automatically.
Your Google account is not listed as a test user for the OAuth app. Open the [OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent) in your Google Cloud project → **Test users** → **Add users** → enter your Google account email. Then retry `gws auth login`.
Now let's give Gemini CLI the ability to use `gws` — so it can read your calendar, email, and drive when you ask.
Open your terminal and run this command:
```bash title="Copy this command" theme={null}
gemini extensions install https://github.com/googleworkspace/cli
```
This tells Gemini CLI to use the Google Workspace CLI as an extension. Once installed, Gemini can pull your calendar events, search your emails, find shared documents, and generate meeting briefings — all through natural language prompts.
**What is an extension?** Extensions are plugins that add new capabilities to Gemini CLI. This extension connects Gemini to your Google Workspace apps — similar to how you might install an app on your phone.
Make sure you have an internet connection and that Node.js is installed correctly. Try running `node --version` first. If that works but the extension install fails, try closing and reopening your terminal, then running the command again.
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
Start Gemini CLI and ask it to read your calendar and drive — this confirms everything is connected.
```bash title="Copy this command" theme={null}
gemini
```
Once Gemini CLI is running, say (with Wispr Flow) or type this prompt:
```text title="Say this or copy this prompt" theme={null}
What meetings do I have this week?
```
You should see Gemini CLI access your Google Calendar and return a list of upcoming events. If it does, try one more test:
```text title="Say this or copy this prompt" theme={null}
List my recent Google Drive files.
```
You should see Gemini CLI access your Google Drive and return a list of recent files. If both work, everything is connected.
**Gemini asks for permission?** If Gemini CLI asks to approve a tool call, type `y` and press **Enter**. This is normal — it is asking your permission before accessing your Google data.
The extension may not have installed correctly. Try running the install command again:
```bash theme={null}
gemini extensions install https://github.com/googleworkspace/cli
```
Then exit (`/quit`) and restart Gemini CLI. You can check installed extensions with `/extensions list`.
Copy the URL shown in your terminal and paste it into your browser manually. Complete the sign-in there, then return to the terminal.
## Verify your setup
Run `node --version` in your terminal. You should see a version number.
Run `gemini` in your terminal. It starts up and shows a prompt where you can type.
Run `gws calendar +agenda` in your terminal. You should see your upcoming events.
The extension installed without errors. You can verify with `/extensions list` inside Gemini CLI.
Gemini CLI can tell you about your meetings when you ask "What meetings do I have this week?"
Gemini CLI can list your recent files when you ask "List my recent Google Drive files."
All set? Head to [Prepare for your meeting](/tutorial/meeting-prep/prepare) to get your first AI-powered meeting briefing.
# Get your morning briefing
Source: https://herwaka.shesharp.org.nz/tutorial/morning-briefing/briefing
Ask AI to read your calendar and inbox — get a complete morning briefing in seconds.
Your AI tools are connected to Google Calendar and Gmail. Now let's put them to work — ask for a morning briefing and get everything you need to start your day.
## Today's agenda
First, let's see what's on your calendar today.
Make sure Gemini CLI is running in your terminal. Then say (with Wispr Flow) or type this prompt:
```text title="Say this or copy this prompt" theme={null}
Show me my calendar for today. List each meeting with the time, title, and who's attending.
```
**Gemini asks for permission?** If Gemini CLI asks to approve a tool call, type `y` and press **Enter**.
**Voice or typing — both work.** If you have Wispr Flow running, just start speaking. Otherwise, copy and paste the prompt or type your own request. Gemini understands natural language either way.
If you prefer to use `gws` directly in your terminal:
```bash title="Copy this command" theme={null}
gws calendar +agenda --today
```
This prints today's events directly to your terminal — no AI needed.
You should see something like this:
> **Today's meetings (3 total):**
>
> * **9:00 AM** — Team standup · Sarah, James, Priya
> * **11:30 AM** — Design review · Alex, Morgan
> * **2:00 PM** — 1:1 with manager · Taylor
That's your day at a glance — no need to open Google Calendar.
## Email triage
Now let's check your inbox. Instead of scrolling through every message, ask AI to sort them by urgency.
```text title="Say this or copy this prompt" theme={null}
Check my Gmail and triage my unread emails. Group them by urgency: needs reply today, informational, and can ignore.
```
```bash title="Copy this command" theme={null}
gws gmail +triage
```
This runs the built-in triage workflow, which groups your unread emails by urgency.
You should see something like this:
> **Email triage (14 unread):**
>
> **Needs reply today**
>
> * **Sarah Chen** — "Budget sign-off needed" — Asking for approval by end of day
> * **Recruiter** — "Interview confirmation" — Confirming your slot for Thursday at 2 PM
>
> **Informational**
>
> * **Project Team** — "Sprint notes" — Summary of last week's sprint, 2 action items for you
> * **HR** — "Updated leave policy" — New guidelines for annual leave
>
> **Can ignore**
>
> * **LinkedIn** — "Weekly digest" — Industry news roundup
> * **Coursera** — "New courses for you" — Course recommendations
Your inbox is triaged in seconds — you know exactly what needs your attention.
## Standup summary
Now let's generate a standup update based on your real calendar and email data.
```text title="Say this or copy this prompt" theme={null}
Based on my calendar from yesterday and today, plus my recent emails, give me a standup summary: what I did yesterday, what I'm doing today, and any blockers.
```
```bash title="Copy this command" theme={null}
gws workflow +standup-report
```
This generates a standup report from your calendar and email activity.
You should see something like this:
> **Standup summary:**
>
> **Yesterday**
>
> * Attended design review with Alex and Morgan
> * Replied to Sarah's budget thread
> * Reviewed sprint notes from Project Team
>
> **Today**
>
> * Team standup at 9:00 AM
> * Design review at 11:30 AM
> * 1:1 with Taylor at 2:00 PM
>
> **Blockers**
>
> * Waiting on budget sign-off from Sarah (email sent yesterday, reply needed today)
Copy that into Slack and you're done — no more scrambling to remember what you did yesterday.
## The full briefing
Here's where AI really shines. Instead of asking for each piece separately, combine everything into one prompt.
```text title="Say this or copy this prompt" theme={null}
Give me a complete morning briefing: today's meetings with times, urgent emails that need replies, and a quick standup summary I can paste into Slack.
```
For the combined briefing, you will want to use Gemini CLI — this is exactly the kind of task where AI adds value by combining multiple data sources into one summary. The direct `gws` commands work best for individual tasks.
**This is where AI shines.** Instead of checking your calendar, then your inbox, then trying to write a standup update — AI pulls from all three sources at once and gives you a single, structured briefing. One prompt replaces 15 minutes of context-switching.
## Save your briefing
Want to keep a copy of your briefing? Here's how.
Ask Gemini CLI to save it to a file:
```text title="Say this or copy this prompt" theme={null}
Save that briefing to a file called morning-briefing.txt in the current folder.
```
The briefing is now saved as a text file on your computer.
You can pipe the output of any `gws` command to a file:
```bash title="Copy this command" theme={null}
gws calendar +agenda --today > morning-briefing.txt
```
This saves the calendar output to a text file. You can append email triage to the same file:
```bash title="Copy this command" theme={null}
gws gmail +triage >> morning-briefing.txt
```
## What just happened?
Let's recap what you did:
1. **Checked your calendar** — AI listed today's meetings with times and attendees
2. **Triaged your inbox** — AI grouped emails by urgency so you know what to tackle first
3. **Generated a standup summary** — AI wrote a ready-to-paste update from your real data
4. **Combined everything** — one prompt gave you a complete morning briefing
The key insight: AI is excellent at pulling data from multiple sources and combining it into something useful. A task that would take you 15 minutes of tab-switching took AI about 10 seconds.
## Troubleshooting
Make sure your Google Calendar actually has events for today. Try asking for a broader range: "Show me my calendar for this week" to confirm the connection is working. If you see events for other days but not today, your calendar is connected correctly — you just have a free day.
You may not have unread emails. Try asking: "Show me all emails from the last 3 days" instead of just unread ones. You can also check that Gmail is connected by asking: "How many emails do I have in my inbox?"
The extension may not be installed correctly. Check with `/extensions list` inside Gemini CLI. If the workspace extension is not listed, install it again:
```bash theme={null}
gemini extensions install https://github.com/googleworkspace/cli
```
Then exit (`/quit`) and restart Gemini CLI.
Your Google authorisation may have expired. Try these steps:
1. Exit Gemini CLI (`/quit`)
2. Re-authenticate with gws: `gws auth login -s gmail,calendar`
3. Restart Gemini CLI and try again
If that doesn't work, check your [Google Account security settings](https://myaccount.google.com/permissions) to make sure the app still has access.
AI builds the standup from your calendar events and recent emails. If your calendar was empty yesterday, there won't be much to report. Try being more specific: "Check my calendar for the last 3 days and my emails from the last 2 days, then write a standup summary."
Wispr Flow may occasionally mishear technical terms or proper nouns. You can review and correct the text in Gemini CLI before pressing Enter. If voice input is causing too many errors, switch to typing or pasting prompts instead.
Nice work — you've built a real morning briefing workflow. Head to [Keep going](/tutorial/morning-briefing/keep-going) for ideas on how to make this a daily habit.
# Keep going
Source: https://herwaka.shesharp.org.nz/tutorial/morning-briefing/keep-going
Make your morning briefing a daily habit — try new prompts, customise your routine, and explore what else is possible.
You've built a real morning routine — AI reads your calendar and inbox so you can start your day prepared. Let's look at what you achieved and where to go next.
## What you built
```mermaid theme={null}
flowchart LR
A["You speak\nor type"] --> B["AI reads\nCalendar + Gmail"]
B --> C["Morning\nbriefing"]
C --> D["Ready for\nthe day"]
```
* Connected AI to your Google Calendar and Gmail — using real credentials
* Pulled today's meetings with times and attendees
* Triaged your inbox by urgency — needs reply, informational, can ignore
* Generated a standup summary from your real data
* Combined everything into a single morning briefing
* All for free, in under 20 minutes
## Make it a daily habit
The real power of this tool isn't a one-time briefing — it's using it every day to start your mornings focused. Try these routines:
Start the week by saying "Show me all my meetings for this week and flag any scheduling conflicts." Get the full picture before Monday morning.
15 minutes before a meeting, say: "Summarise all emails about \[topic] from the last week and show me who's attending the meeting at \[time]." Walk in fully prepared.
Before logging off, say: "What's on my calendar tomorrow and are there any emails I still need to reply to?" Never be surprised by an early morning meeting.
Every Friday, say: "Give me a summary of this week's meetings and a preview of next week." Great for planning ahead and winding down.
## Try more prompts
Now that you're comfortable with the basics, try these more sophisticated prompts. Say them with Wispr Flow, type them, or paste them — they all work the same way.
```text title="Say this or copy this prompt" theme={null}
Compare my schedule this week to last week. Am I spending more or less time in meetings?
```
```text title="Say this or copy this prompt" theme={null}
Look at my meetings for this week — which ones could probably be emails instead?
```
```text title="Say this or copy this prompt" theme={null}
Draft a message to [person's name] about rescheduling our meeting on [day] to [new time].
```
```text title="Say this or copy this prompt" theme={null}
Check my emails and calendar for the last 5 days and write a weekly status update I can send to my team.
```
```text title="Say this or copy this prompt" theme={null}
What are the 3 most important things I need to do today based on my calendar and emails?
```
```text title="Say this or copy this prompt" theme={null}
Find any meeting invitations I haven't responded to and list them with the date, time, and organiser.
```
## Level up: From Gemini CLI to Claude Code
You have been using Gemini CLI in your terminal — speaking prompts, approving tool calls, and getting structured results. These are exactly the same skills used by professional developers with **Claude Code**, a more powerful CLI tool from Anthropic.
| | Gemini CLI | Claude Code |
| --------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| **What is the same** | Speak or type in the terminal. AI reads data, processes it, gives you results. You approve actions. | Same workflow, same skills. |
| **What is different** | Free, great for everyday tasks | Smarter, can write and edit code, handles complex multi-step projects |
Keep building with Gemini CLI — it is free and you are learning fast. When you are ready for the next level, the [Vibe Coding tutorial](/tutorial/vibe-coding/overview) introduces Claude Code — and everything you have learned so far will transfer directly.
## Try another tutorial
Ready for your next AI-powered workflow? Try one of these:
Go beyond triage — extract action items from your inbox and turn them into a task list automatically.
Prepare for any meeting in 60 seconds — pull attendee emails, past notes, and agenda items with one prompt.
Tame your inbox — use AI to read and summarise your unread emails, catch up on messages, and find what matters.
Same concept, different tool — catch up on any Slack channel in seconds using AI.
## Reflect
Many people are surprised at how natural it feels. Instead of opening three apps and piecing information together, you ask one question and get a complete picture. The AI does the context-switching for you.
Think about the difference between starting your day by scrolling through tabs and starting with a clear summary of what matters. A morning briefing removes the anxiety of "what am I forgetting?" and lets you focus on the work that actually matters.
The same approach works for Slack messages, project management tools, news feeds, and more. Once you know how to connect AI to one data source, you can connect it to many — and combine them into a single briefing tailored to your role.
Imagine if everyone on your team started their day with a briefing. Standups would be faster because everyone already knows what's on the agenda. You could share your briefing in a team channel as a quick FYI. The less time people spend gathering context, the more time they spend doing meaningful work.
## Resources
| Resource | Description | Link |
| -------------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Google's AI assistant for the terminal | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| gws (Google Workspace CLI) | CLI tool for Gmail, Calendar, Drive, and more | [github.com/googleworkspace/cli](https://github.com/googleworkspace/cli) |
| Claude Code | Professional AI CLI tool (your next step) | [docs.anthropic.com](https://docs.anthropic.com/en/docs/claude-code) |
| Wispr Flow | Voice input for any application | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
| Manage Google permissions | Revoke app access to your Google account | [myaccount.google.com/permissions](https://myaccount.google.com/permissions) |
Thank you for completing this tutorial! You went from zero to a complete AI-powered morning briefing. The ability to connect tools, pull live data, and have AI synthesise it for you is valuable in any role — take this skill with you.
# AI Morning Briefing
Source: https://herwaka.shesharp.org.nz/tutorial/morning-briefing/overview
Start your day in 30 seconds — get today's meetings, urgent emails, and a standup-ready summary, all from one command. No coding required.
**Difficulty: ★★☆☆☆ Easy** · Estimated time: \~15 to 20 minutes
It's 8 AM. You have meetings, unread emails, deadlines — but no clear picture of what's urgent. You could open three tabs, scroll through your calendar, skim your inbox, and piece it together yourself. Or you could ask AI for a morning briefing and get the full picture in 30 seconds.
**That's what we're building.** A workflow that reads your Google Calendar and Gmail, then gives you a complete morning briefing — today's agenda, urgent emails, and a standup summary — all from one command.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## What you will build
Pull your meetings for the day — times, titles, and who's attending
AI reads your inbox and groups emails by urgency — what needs a reply, what's informational, and what you can ignore
Get a ready-to-paste standup update — what you did yesterday, what's on today, and any blockers
## How it works
```mermaid theme={null}
flowchart LR
A["You speak\nor type"] --> B["Gemini CLI"]
B --> C["gws reads\nCalendar + Gmail"]
C -->|"summarises"| D["Morning\nbriefing"]
```
You speak (or type) a single prompt. Gemini CLI uses the Google Workspace CLI (`gws`) to pull your calendar events and emails. AI combines everything into a clear, structured briefing you can read in 30 seconds or paste into Slack.
## What you will learn
* Connect AI to your Google Calendar and Gmail using `gws`
* Use natural language prompts to pull today's meetings and urgent emails
* Get AI to triage your inbox by urgency — no manual sorting required
* Generate a standup summary from your real calendar and email data
* Combine multiple data sources into one AI-powered briefing
* Build a daily habit that saves you 15+ minutes every morning
**No coding required.** The AI handles everything — your job is to describe what kind of briefing you want. If you can explain what you need to a colleague, you can do this.
## Tools
Google's free AI assistant that runs in your terminal. Supports extensions for Google Workspace — reads your calendar and email on command.
A command-line tool that controls Gmail, Calendar, Drive, and more from your terminal. It's what lets AI access your Google data.
Optional voice input tool — speak instead of type. Works in any application, including your terminal. Hands-free morning briefings.
Required to install Gemini CLI and gws. A one-time setup step.
## Cost
| Tool | Cost |
| ---------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Free (1,000 requests/day) |
| gws | Free and open-source |
| Wispr Flow | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| Node.js | Free |
| **Total** | **\$0** |
## Prerequisites
Windows or macOS. No special hardware needed.
Most of that is one-time setup. Take your time — there's no rush.
Any personal or work Google account with Gmail and Google Calendar enabled.
Ready to get started? Head to [Set up your tools](/tutorial/morning-briefing/setup) to get everything connected.
# Set up your tools
Source: https://herwaka.shesharp.org.nz/tutorial/morning-briefing/setup
Install Gemini CLI and Google Workspace CLI — connect AI to your Google Calendar and Gmail.
Before we start building your morning briefing, let's get your AI tools connected to Google Calendar and Gmail.
**You will need:** a laptop with internet access and a Google account with Gmail and Calendar. No coding experience is required — we will guide you through every step.
**Already have Node.js?** If you installed it for a previous tutorial, skip this step. Run `node --version` in your terminal to check — you should see a version number like `v22.x.x`.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
**Already have Gemini CLI?** If you installed it for a previous tutorial, skip this step. Just run `gemini` in your terminal to check it still works.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
Type `/quit` to exit Gemini CLI for now. We will start it again after installing the Google Workspace CLI.
`gws` is a command-line tool that controls all your Google apps — Gmail, Calendar, Drive, Docs, Sheets — from the terminal. It's what lets AI manage your Google Workspace without opening a browser.
Open your terminal and type:
```bash title="Copy this command" theme={null}
npm install -g @googleworkspace/cli
```
Wait for the installation to finish. Then set up your Google Cloud project:
```bash title="Copy this command" theme={null}
gws auth setup
```
**What does `gws auth setup` do?** It creates a Google Cloud project for you, enables the APIs you need, and prepares everything for sign-in. It requires the `gcloud` CLI — if you don't have it, see the troubleshooting section below.
Once setup is complete, sign in and choose which Google services to connect:
```bash title="Copy this command" theme={null}
gws auth login -s gmail,calendar,drive,docs,sheets
```
A browser window will open — sign in with your Google account and approve the permissions.
**"Google hasn't verified this app" warning:** This is normal. Click **Advanced** → **Go to \[app name] (unsafe)** to continue. This is safe for personal use — Google shows this for all apps that haven't gone through their official review process.
**Scope checkboxes:** If you see a list of permission checkboxes, select all of them (or click **Select all**) before clicking **Continue**. These are the permissions `gws` needs to read and manage your Google apps.
Verify the installation by checking today's calendar:
```bash title="Copy this command" theme={null}
gws calendar +agenda
```
You should see your upcoming events listed in your terminal. If you do, `gws` is working.
**Free to use:** `gws` is free and open-source. It connects to Google's APIs using your own Google account — there are no usage limits beyond Google's own API quotas.
The installation may not have added `gws` to your system PATH. Try closing your terminal completely and opening a new one, then run `gws --version`. If it still doesn't work, try reinstalling:
```bash theme={null}
npm install -g @googleworkspace/cli
```
`gws auth setup` uses the `gcloud` CLI to automate project creation. You have two options:
1. **Install gcloud** from [cloud.google.com/sdk/docs/install](https://cloud.google.com/sdk/docs/install), then run `gws auth setup` again
2. **Skip gcloud** — set up OAuth credentials manually in the [Google Cloud Console](https://console.cloud.google.com/). Create a project, enable the APIs you need, create an OAuth Desktop App client, download the JSON, and save it to `~/.config/gws/client_secret.json`. Then run `gws auth login`.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @googleworkspace/cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
If you see an error like "Gmail API has not been used in project...", the API needs to be enabled:
1. Look for the `enable_url` link in the error message
2. Open that link in your browser
3. Click **Enable**
4. Wait 10 seconds, then retry your command
You can also run `gws auth setup` again — it enables all required APIs automatically.
Your Google account is not listed as a test user for the OAuth app. Open the [OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent) in your Google Cloud project → **Test users** → **Add users** → enter your Google account email. Then retry `gws auth login`.
Now let's give Gemini CLI the ability to use `gws` — so it can read your calendar and email when you ask.
Open your terminal and run this command:
```bash title="Copy this command" theme={null}
gemini extensions install https://github.com/googleworkspace/cli
```
This tells Gemini CLI to use the Google Workspace CLI as an extension. Once installed, Gemini can pull your calendar events, triage your inbox, and generate standup summaries — all through natural language prompts.
**What is an extension?** Extensions are plugins that add new capabilities to Gemini CLI. This extension connects Gemini to your Google Workspace apps — similar to how you might install an app on your phone.
Make sure you have an internet connection and that Node.js is installed correctly. Try running `node --version` first. If that works but the extension install fails, try closing and reopening your terminal, then running the command again.
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
Start Gemini CLI and ask it to read your calendar — this confirms everything is connected.
```bash title="Copy this command" theme={null}
gemini
```
Once Gemini CLI is running, say (with Wispr Flow) or type this prompt:
```text title="Say this or copy this prompt" theme={null}
What meetings do I have today?
```
You should see Gemini CLI access your Google Calendar and return a list of today's events. If it does, everything is working.
**Gemini asks for permission?** If Gemini CLI asks to approve a tool call, type `y` and press **Enter**. This is normal — it is asking your permission before accessing your Google data.
The extension may not have installed correctly. Try running the install command again:
```bash theme={null}
gemini extensions install https://github.com/googleworkspace/cli
```
Then exit (`/quit`) and restart Gemini CLI. You can check installed extensions with `/extensions list`.
Copy the URL shown in your terminal and paste it into your browser manually. Complete the sign-in there, then return to the terminal.
## Verify your setup
Run `node --version` in your terminal. You should see a version number.
Run `gemini` in your terminal. It starts up and shows a prompt where you can type.
Run `gws calendar +agenda` in your terminal. You should see your upcoming events.
The extension installed without errors. You can verify with `/extensions list` inside Gemini CLI.
Gemini CLI can tell you about your meetings when you ask "What meetings do I have today?"
All set? Head to [Get your morning briefing](/tutorial/morning-briefing/briefing) to start your first AI-powered morning routine.
# Capture, track, and review
Source: https://herwaka.shesharp.org.nz/tutorial/obsidian-daily/capture
Use natural language through Gemini CLI to capture thoughts, manage tasks, and review your day — by speaking or typing, never raw commands.
Your tools are connected. Let's put them to work.
With Wispr Flow running, just start speaking. Your words appear as text in Gemini CLI automatically. Say what you need naturally — Gemini understands and runs the right commands for you.
Copy any prompt from this page and paste it into Gemini CLI. Or type your own request in natural language. No special syntax needed — just describe what you want.
## Capture your first thought
Open your terminal and start Gemini CLI. This is the only raw command you need to type in this entire tutorial:
```bash title="Copy this command" theme={null}
gemini
```
From here on, everything is natural language.
Say or type this prompt:
```text title="Say this or copy this prompt" theme={null}
Open my daily note in Obsidian, and add this line at the bottom:
"Met Sarah at lunch — she mentioned a job opening at Xero"
```
Switch to Obsidian — your note now has that line at the bottom. It appeared instantly, no clicking or switching apps required.
**What just happened?** You described what you wanted in plain language. Gemini CLI understood that you wanted to append text to your daily note, figured out the right Obsidian commands to run, and executed them for you. You never had to learn any command syntax.
Now add a task with a checkbox:
```text title="Say this or copy this prompt" theme={null}
Add a task to my Obsidian daily note:
"Send CV to Sarah by Friday"
Make it a checkbox so I can track it.
```
In Obsidian, you will see a clickable checkbox next to your task.
**What just happened?** Gemini understood that "make it a checkbox" means using Obsidian's task syntax (`- [ ]`). You did not need to know that — you just described what you wanted and Gemini handled the formatting.
Try a few more to see how natural it feels. Each prompt adds something different to your daily note.
A meeting note:
```text title="Say this or copy this prompt" theme={null}
Add to my daily note: Team meeting — new project starting in April, need to review the brief
```
A task for later:
```text title="Say this or copy this prompt" theme={null}
Add a task to my daily note: Buy groceries — milk, bread, eggs
```
An idea to come back to:
```text title="Say this or copy this prompt" theme={null}
Add to my daily note: Idea — start a weekly reflection journal
```
**Notice how flexible the language is.** You can say "add to my daily note", "put this in my daily note", "append to today's note" — Gemini understands all of these. There is no single right way to phrase it.
## Track your tasks
You have been adding tasks. Now let's manage them — still using nothing but natural language.
```text title="Say this or copy this prompt" theme={null}
Show me all the tasks in my Obsidian daily note
```
You should see a list of your tasks with their current status — which ones are done and which are still open.
```text title="Say this or copy this prompt" theme={null}
Mark the task about sending my CV as done
```
The checkbox changes from empty to checked — in both the terminal output and in Obsidian.
```text title="Say this or copy this prompt" theme={null}
Show me only the tasks I haven't finished yet
```
This filters your task list to show only the incomplete items — a quick way to see what is still on your plate.
**Notice you do not need to know line numbers or command syntax.** Just describe what you want — "mark the task about sending my CV" — and Gemini figures out which task you mean and how to update it.
## Review your day
At the end of the day (or any time), review everything you captured.
```text title="Say this or copy this prompt" theme={null}
Read my Obsidian daily note and show me everything I captured today
```
This shows the full contents of today's daily note — every thought, task, and idea you added throughout the day.
```text title="Say this or copy this prompt" theme={null}
Search my Obsidian vault for any notes that mention Sarah
```
This finds every note that mentions "Sarah" — whether it was today, last week, or last month.
```text title="Say this or copy this prompt" theme={null}
Search my Obsidian vault for notes containing the word project, and show me the matching lines
```
This shows the actual lines that contain your search term, so you can quickly find the information you need without opening each note.
**Search is one of the most powerful features.** As your vault grows, you will have weeks and months of notes. Being able to search across all of them by simply asking means you never lose anything — every thought you captured is findable.
## Go further — try your own requests
The prompts above are just the beginning. Here are some creative requests to show how flexible natural language is:
```text title="Say this or copy this prompt" theme={null}
Add a heading called 'Afternoon Goals' to my daily note, then add three empty checkboxes underneath
```
```text title="Say this or copy this prompt" theme={null}
Read my daily note and summarise what I did today in 3 bullet points
```
```text title="Say this or copy this prompt" theme={null}
Create a new note in Obsidian called 'Meeting Notes - March 25' and add a heading, then add bullet points about the topics we discussed
```
```text title="Say this or copy this prompt" theme={null}
How many notes do I have in my Obsidian vault?
```
```text title="Say this or copy this prompt" theme={null}
What tags do I use most in my Obsidian vault?
```
```text title="Say this or copy this prompt" theme={null}
Open a random note from my vault — surprise me
```
**This is the magic of natural language.** You do not need to memorise commands — just describe what you want. If Gemini is not sure what you mean, it will ask you to clarify.
## Troubleshooting
Make sure Obsidian is running and the CLI is enabled. Test the CLI directly by running `obsidian help` in a separate terminal window. If that works but Gemini still cannot run commands, try exiting Gemini CLI (`/quit`) and starting it again.
This is normal. Type `y` and press **Enter** to allow the command. Gemini CLI asks for your permission before running terminal commands — this is a safety feature to make sure you are comfortable with what it is about to do.
Wispr Flow may occasionally mishear technical terms or proper nouns. You can review and correct the text in Gemini CLI before pressing Enter. If voice input is causing too many errors, switch to typing or pasting prompts instead.
Make sure Obsidian is running — Gemini CLI communicates with the Obsidian app through the CLI, so Obsidian needs to be open. Also check that you have the correct vault selected if you have more than one.
Nice work — you have captured thoughts, managed tasks, and searched your notes, all by speaking or typing naturally. Head to [Keep going](/tutorial/obsidian-daily/keep-going) for ideas on building this into a daily habit.
# Keep going
Source: https://herwaka.shesharp.org.nz/tutorial/obsidian-daily/keep-going
Next steps, daily habit ideas, and resources for your voice-first note-taking workflow with Gemini CLI and Obsidian.
You built a voice-first workflow for capturing, tracking, and reviewing your day — powered by natural language and AI. Let's look at what you achieved and where to go next.
## What you built
```mermaid theme={null}
flowchart LR
A["You speak"] --> B["Gemini\nunderstands"]
B --> C["Obsidian\nupdates"]
C --> D["Notes\ngrow"]
```
* Captured thoughts, ideas, and notes by speaking or typing naturally
* Added tasks with checkboxes and marked them as done using plain language
* Reviewed your daily note and searched across your entire vault
* Controlled Obsidian without memorising a single command
* All for free, in under 30 minutes
## What you learned
**The skill that matters most is learning to talk to your tools.** You discovered that AI can bridge the gap between what you want and how software works. Instead of learning command syntax, you just described what you needed. That is a transferable skill you can use with any AI-powered tool.
* How to use Gemini CLI as a natural language interface for Obsidian
* How to capture thoughts instantly by speaking or typing a request
* How to manage tasks without knowing any command syntax
* How to search across all your notes by simply asking
* How to use voice input with Wispr Flow for a hands-free workflow
* How AI translates natural language into precise tool commands
## Make it a daily habit
The real power of daily notes comes from using them consistently. Here are three voice-first routines to try:
**Morning:** Start your day with a quick review.
```text title="Say this or copy this prompt" theme={null}
Open my daily note and show me yesterday's unfinished tasks
```
Check what carried over from yesterday. Move any unfinished tasks to today's note by asking Gemini to do it for you.
**During the day:** Capture thoughts as they come — without leaving what you are doing.
```text title="Say this or copy this prompt" theme={null}
Add to my daily note: [whatever you're thinking right now]
```
Replace the text after the colon with whatever you want to remember. It takes seconds — especially by voice.
**Evening:** Review and wrap up your day.
```text title="Say this or copy this prompt" theme={null}
Show me today's tasks and mark anything about groceries as done
```
See what you accomplished. Mark tasks as done. Add a quick reflection if you like.
## Try these prompts
Set up your day with goals and structure:
```text title="Say this or copy this prompt" theme={null}
Add a heading called 'Today's Priorities' to my daily note with three empty checkboxes for my top tasks
```
Capture notes from a meeting without switching apps:
```text title="Say this or copy this prompt" theme={null}
Create a new note in Obsidian called 'Standup Notes' and add today's date as a heading, then add bullet points for what I did yesterday, what I'm doing today, and blockers
```
Get a summary of everything you captured:
```text title="Say this or copy this prompt" theme={null}
Read my daily note and summarise what I did today in 3 bullet points
```
Look back across the whole week:
```text title="Say this or copy this prompt" theme={null}
Search my Obsidian vault for all notes from this week and tell me what topics came up most often
```
```text title="Say this or copy this prompt" theme={null}
Create a note called Weekly Review from my Review template in Obsidian
```
```text title="Say this or copy this prompt" theme={null}
Count the words in my current Obsidian daily note
```
```text title="Say this or copy this prompt" theme={null}
Show me all my bookmarks in Obsidian
```
## Try another tutorial
Search, audit, and tidy up your Obsidian vault by describing what you want — AI finds issues and fixes them.
Use AI to read and summarise your unread emails — catch up on your inbox in seconds.
Connect AI to your Slack workspace and get instant channel summaries.
Create and deploy your own personal website to showcase your skills and projects.
## Reflect
Many people are surprised by how natural it feels. Instead of learning menus, buttons, and command syntax, you just said what you wanted. This is how AI is changing the way we interact with tools — by removing the need to learn each tool's specific interface.
Think about: capturing ideas during commutes, logging meeting notes without typing, tracking tasks while your hands are busy, recording reflections at the end of the day, or building a searchable personal knowledge base over time. The lower the friction, the more you capture.
The same approach works for email, calendars, file management, web searches, and more. Once you are comfortable describing what you want to an AI assistant, you can apply that skill to any tool that has a command-line interface or API.
## Resources
| Resource | Description | Link |
| ------------------ | ------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
| Gemini CLI | Google's free AI assistant for the terminal | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| Wispr Flow | Voice-to-text tool for hands-free input | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
| Obsidian | Free note-taking app with local storage | [obsidian.md](https://obsidian.md) |
| Obsidian CLI docs | Official documentation for Obsidian's command-line interface | [obsidian.md/cli](https://obsidian.md/cli) |
| Obsidian community | Forum for questions, tips, and community support | [forum.obsidian.md](https://forum.obsidian.md) |
Thank you for completing this tutorial! You went from zero to a fully working voice-first daily notes workflow — capturing thoughts, tracking tasks, and searching your notes, all by speaking naturally. Take this habit with you and watch how it transforms your productivity.
# Voice-Control Your Notes with AI
Source: https://herwaka.shesharp.org.nz/tutorial/obsidian-daily/overview
Speak to your notes through Gemini CLI — capture thoughts, track tasks, and search your vault using natural language. No commands to memorise, no coding required.
**Difficulty: ★☆☆☆☆ Getting Started** · Estimated time: \~30 minutes
You're in a meeting and an idea strikes. Instead of opening an app, switching windows, finding the right note, and typing it all out… you just say:
> "Add to my daily note: Sarah mentioned a job opening at Xero"
And it appears in Obsidian. No typing, no clicking, no context switching.
**That's what we're building.** A voice-first daily notes workflow where you speak naturally and AI handles the rest — capturing thoughts, tracking tasks, and searching your vault.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## What you will build
Capture thoughts by voice — say what you want to remember and it lands in your daily note
Manage tasks with natural language — add them, check them off, review what is left
Search your notes by asking — no need to remember file names or folder structures
## How it works
```mermaid theme={null}
flowchart LR
A["You speak"] --> B["Wispr Flow\nconverts to text"]
B --> C["Gemini CLI\nunderstands"]
C --> D["Obsidian\nupdates"]
```
You speak naturally (or type, if you prefer). Wispr Flow converts your voice to text. Gemini CLI understands what you want and runs the right Obsidian commands behind the scenes. Your notes update instantly — you never need to learn or type a single command.
**You can either speak your prompts using Wispr Flow, or type/paste them into Gemini CLI. Both work exactly the same way.** Wispr Flow is optional — it just makes the experience hands-free. Every prompt in this tutorial works whether you speak it or type it.
## What you will learn
* How to control Obsidian using natural language through Gemini CLI
* How to capture thoughts instantly by speaking or typing a request
* How to add and manage tasks without memorising any commands
* How to search across all your notes by simply asking
* How to use voice input with Wispr Flow for a hands-free workflow
* How to build a simple daily productivity habit with AI
**No coding required.** Every step uses natural language you can say out loud or copy and paste. If you can describe what you want, you can do this.
## Tools
Google's free AI assistant that runs in your terminal. It understands your natural language requests and translates them into actions.
Optional voice input tool — speak instead of type. Works in any application, including your terminal.
A free note-taking app that stores your notes as plain text files on your computer. Your data stays with you — no cloud account required.
A free tool needed to install Gemini CLI. One-time setup.
The command-line app built into your computer. On macOS it is called Terminal; on Windows it is called PowerShell or Command Prompt.
## Cost
| Tool | Cost |
| ---------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Free (1,000 requests/day) |
| Wispr Flow | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| Obsidian | Free |
| Node.js | Free |
| Terminal | Free (built into your computer) |
| **Total** | **\$0** |
## Prerequisites
Windows or macOS. No special hardware needed.
Take your time — there is no rush.
No prior experience needed. Just a willingness to try something new.
Ready to get started? Head to [Set up your tools](/tutorial/obsidian-daily/setup) to install everything you need.
# Set up your tools
Source: https://herwaka.shesharp.org.nz/tutorial/obsidian-daily/setup
Install Gemini CLI, Obsidian, and optionally Wispr Flow — everything you need to control your notes with natural language.
Before we start capturing, let's get all your tools installed and connected.
**You will need:** a laptop with internet access. No coding experience is required — we will guide you through every step.
**Already have Node.js?** If you installed it for a previous tutorial, skip this step. Run `node --version` in your terminal to check — you should see a version number like `v22.x.x`.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
**Already have Gemini CLI?** If you installed it for a previous tutorial, skip this step. Just run `gemini` in your terminal to check it still works.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
Type `/quit` to exit Gemini CLI for now. We will start it again once everything else is set up.
Obsidian is a free note-taking app that stores your notes as plain text files on your computer. The CLI lets you control it from the terminal.
1. Go to [obsidian.md/download](https://obsidian.md/download) and click **Download for Windows**
2. Run the installer and follow the prompts
3. Open Obsidian — if this is your first time, click **Create new vault**, give it a name (e.g. "My Notes"), and choose where to save it
1. Go to [obsidian.md/download](https://obsidian.md/download) and click **Download for macOS**
2. Drag Obsidian to your **Applications** folder
3. Open Obsidian — if this is your first time, click **Create new vault**, give it a name (e.g. "My Notes"), and choose where to save it
**Already have Obsidian?** Make sure you are running version **1.12.4 or later**. Go to **Settings** → **General** → check the version number at the top. If you need to update, download the latest installer from [obsidian.md/download](https://obsidian.md/download).
Now enable the CLI:
1. In Obsidian, open **Settings** (gear icon in the bottom-left)
2. Go to **General**
3. Find **Command line interface** and toggle it **on**
4. Follow the prompt to register the CLI
5. **Close and reopen your terminal** for the changes to take effect
Test it by opening your terminal and typing:
```bash theme={null}
obsidian help
```
You should see a list of available commands. If you do, the CLI is ready.
Restart your terminal after enabling the CLI — the PATH changes only take effect in new terminal windows.
**macOS:** Check that your `~/.zprofile` file contains this line:
```bash theme={null}
export PATH="$PATH:/Applications/Obsidian.app/Contents/MacOS"
```
If it is missing, add it manually, then restart your terminal.
**Windows:** Make sure you are using the Obsidian 1.12.4+ installer. The installer adds a terminal redirector that allows the CLI to work. If the command still isn't found, try restarting your computer.
The CLI connects to the running Obsidian app. Make sure Obsidian is open before running CLI commands. If Obsidian is not running, the first CLI command should launch it automatically — but this may take a few seconds.
By default, the CLI uses the vault in your current terminal directory, or the most recently active vault. To target a specific vault, add `vault=` before your command:
```bash theme={null}
obsidian vault="My Notes" help
```
Daily notes give you a fresh page for each day — like a digital journal that creates itself.
1. Open Obsidian
2. Click the **Settings** icon (gear icon) in the bottom-left corner
3. In the left sidebar, click **Core plugins**
4. Find **Daily notes** in the list
5. Toggle it **on**
**What are daily notes?** Each day, Obsidian can create a new note with today's date as the title. It becomes your running log for the day — everything you capture goes here. Tomorrow, you get a fresh note automatically.
Make sure you are looking under **Core plugins**, not Community plugins. Core plugins are built into Obsidian and are always available. Scroll through the list — Daily notes should be there.
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
Let's make sure Gemini CLI can control Obsidian. Make sure Obsidian is open, then start Gemini CLI in your terminal:
```bash title="Copy this command" theme={null}
gemini
```
Now say (with Wispr Flow) or type this prompt:
```text title="Say this or copy this prompt" theme={null}
Run the command obsidian daily to open today's note in Obsidian
```
Gemini CLI should run the `obsidian daily` command for you, and Obsidian should open today's daily note. If Gemini asks for permission to run the command, type `y` and press **Enter** — this is normal.
**What just happened?** You asked Gemini CLI in plain language to open your daily note. It understood your request, ran the right command, and Obsidian responded. This is the core workflow — you describe what you want, and Gemini handles the rest.
Make sure Obsidian is running and the CLI is enabled. Test the CLI directly by running `obsidian help` in a separate terminal window. If that works, try the Gemini prompt again.
Make sure Obsidian is open and you have at least one vault set up. A vault is simply a folder where Obsidian stores your notes. If you have not created one yet, open Obsidian and follow the prompts to create your first vault.
## Verify your setup
Run `node --version` in your terminal. You should see a version number.
Run `gemini` in your terminal. It starts up and shows a prompt where you can type.
The app opens and you can run `obsidian help` in your terminal without errors.
The Daily notes core plugin is toggled on in Settings → Core plugins.
Asking Gemini to open your daily note works — it runs the command and Obsidian responds.
All set? Head to [Capture, track, and review](/tutorial/obsidian-daily/capture) to start using your daily notes with natural language.
# Keep going
Source: https://herwaka.shesharp.org.nz/tutorial/obsidian-organise/keep-going
Next steps, vault maintenance habits, and creative prompts to keep your Obsidian vault clean and connected — all through natural language.
You searched, audited, and organised your Obsidian vault by talking to Gemini CLI. Let's look at what you achieved and where to go next.
## What you built
```mermaid theme={null}
flowchart LR
A["You describe\nthe problem"] --> B["AI searches\nyour vault"]
B --> C["AI fixes\nthe issues"]
C --> D["Vault\nimproves"]
```
* Searched your entire vault instantly by asking in plain language
* Audited tags and spotted inconsistencies without memorising commands
* Found orphan notes, broken links, and dead ends by describing what you wanted
* Renamed and moved files by telling AI what to do
* Built a cleaner, more connected vault — all for free
## What you learned
**The key insight: vault maintenance is not a one-time event — it is a habit.** Just like tidying your desk or clearing your inbox, a quick monthly review keeps your vault useful and findable. With Gemini CLI, that review is as easy as having a conversation.
* How to search your vault by describing what you are looking for
* How to audit tags, orphan notes, and broken links in plain language
* How to move and rename files by telling AI what to do
* How to check backlinks and understand your vault's connections
* How to use voice input with Wispr Flow for a hands-free experience
* How to use Gemini CLI as a vault maintenance tool
## Monthly vault review
Build a habit of reviewing your vault once a month. Open Gemini CLI and work through these prompts:
1. **Find orphan notes** — connect or archive forgotten notes
```text title="Say this or copy this prompt" theme={null}
Show me all orphan notes in my vault
```
2. **Fix broken links** — repair links that point to notes that no longer exist
```text title="Say this or copy this prompt" theme={null}
Are there any broken links in my vault?
```
3. **Clean up tags** — spot and fix tag inconsistencies
```text title="Say this or copy this prompt" theme={null}
List all my tags with counts — are there any that look like duplicates?
```
4. **Track your vault growth** — see how your vault is evolving
```text title="Say this or copy this prompt" theme={null}
How many files are in my vault now?
```
5. **Archive old notes** — move notes you no longer need to an Archive folder
```text title="Say this or copy this prompt" theme={null}
Move the note called Old Meeting Notes to my Archive folder
```
This takes about 10 minutes and keeps your vault clean and useful.
## Try these prompts
Discover notes that might need better organisation.
```text title="Say this or copy this prompt" theme={null}
Find all notes in my vault that have no tags
```
See which notes are the longest and shortest.
```text title="Say this or copy this prompt" theme={null}
Show me a word count comparison of all my notes
```
Get an overview of everything you have written about a subject.
```text title="Say this or copy this prompt" theme={null}
Search my vault for anything about productivity and summarise it
```
See what you have been working on lately.
```text title="Say this or copy this prompt" theme={null}
Show me all notes I created or modified this month
```
Discover the hubs of your vault — notes with the most backlinks:
```text title="Say this or copy this prompt" theme={null}
Which notes in my vault have the most backlinks? Show me the top 10
```
Notes with many backlinks are often your most important or most referenced notes. Consider giving them clear names and keeping them well-structured.
Ask Gemini CLI to help you sort a whole category of notes at once:
```text title="Say this or copy this prompt" theme={null}
Find all notes in my vault related to recipes and move them into a folder called Recipes
```
Gemini CLI will identify the relevant notes and move them one by one, updating links as it goes.
Ask Gemini CLI to create a structured note with properties already attached:
```text title="Say this or copy this prompt" theme={null}
Create a new note called Weekly Review with headings for What Went Well, What Could Improve, and Next Week's Goals. Add tags for review and reflection.
```
Properties and tags help you filter and organise notes later.
## Try another tutorial
Build a voice-first daily workflow with Gemini CLI and Obsidian — capture thoughts, track tasks, and search your vault by speaking naturally.
Use AI to read and summarise your unread emails. Catch up on your inbox in seconds.
Turn your ideas into beautifully formatted PDF documents using the terminal.
Create and deploy your own personal website — no web development experience needed.
## Reflect
Many people are surprised by how many orphan notes they have, or by tag inconsistencies they never noticed. Asking AI to audit your vault gives you a bird's-eye view that is hard to get just by browsing folders in the app.
Instead of memorising commands and flags, you described what you wanted and AI figured out how to do it. This is a different way of working with tools — one where the barrier to entry is just being able to explain what you need.
Think about your email inbox, your file system, your bookmarks, your project management tool. The same principles apply — regular review, consistent naming, and cleaning up what you no longer need. The natural language approach you practised here transfers to any system where information accumulates.
## Resources
| Resource | Description | Link |
| ----------------- | ------------------------------------------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Google's free AI assistant for the terminal | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| Wispr Flow | Voice-to-text tool for hands-free input | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
| Obsidian | Free note-taking app with local storage | [obsidian.md](https://obsidian.md) |
| Obsidian CLI docs | Documentation for the Obsidian CLI plugin | [obsidian.md/cli](https://obsidian.md/cli) |
| Obsidian Forum | Community forum for questions and tips | [forum.obsidian.md](https://forum.obsidian.md) |
Thank you for completing this tutorial! You went from a messy vault to a cleaner, more connected one — and you did it all by talking to AI. Take this skill with you and enjoy a vault that actually works for you.
# Search, audit, and organise
Source: https://herwaka.shesharp.org.nz/tutorial/obsidian-organise/organise
Find anything in your vault, discover orphan notes and broken links, and tidy up your files — all by talking to Gemini CLI in plain language.
Your tools are ready and you know what is in your vault. Let's explore, find issues, and clean things up — all by describing what you want in natural language.
**You can either speak your prompts using Wispr Flow, or type/paste them into Gemini CLI. Both work exactly the same way.** Wispr Flow is optional — it just makes the experience hands-free. Every prompt in this tutorial works whether you speak it or type it.
## Search your vault
See every file in your vault at a glance:
```text title="Say this or copy this prompt" theme={null}
List all the files in my Obsidian vault
```
Gemini CLI will show all your notes in a list. Look through and see if anything stands out — files with vague names, notes you forgot about, or duplicates.
Understand how your vault is organised:
```text title="Say this or copy this prompt" theme={null}
Show me the folder structure of my Obsidian vault
```
Are your notes spread across too many folders? Are most notes sitting in the root with no folder at all? This gives you a picture of your vault's structure.
Find notes that mention a specific word or phrase:
```text title="Say this or copy this prompt" theme={null}
Search my Obsidian vault for any notes that mention the word meeting
```
Gemini CLI searches the content of every note and returns the ones that mention "meeting". Try replacing "meeting" with any word you are looking for — a project name, a person's name, or a topic.
See the actual matching lines, not just file names:
```text title="Say this or copy this prompt" theme={null}
Search my Obsidian vault for notes containing TODO and show me the matching lines, not just file names
```
This shows you the lines that matched, so you can see exactly what each note says without opening it. Great for finding action items or specific details.
**Search works across your entire vault instantly.** No more opening notes one by one trying to remember where you wrote something. Just describe what you are looking for and Gemini CLI finds it.
## Audit your tags
See every tag in your vault and how often each one is used:
```text title="Say this or copy this prompt" theme={null}
Show me all the tags in my Obsidian vault, with a count of how many times each tag is used
```
Look for inconsistencies. Do you have both `#meeting` and `#meetings`? What about `#mtg`? Spotting these variations is the first step to cleaning them up.
See exactly which files use a specific tag:
```text title="Say this or copy this prompt" theme={null}
Show me which notes use the tag meeting
```
This shows every note tagged with `#meeting`. Replace "meeting" with any tag you want to investigate.
**Consistent tags make your vault much easier to navigate.** If you spot duplicates or variations, note them down. You can ask Gemini CLI to help fix them, or edit the notes directly in Obsidian. Pick one version of each tag and stick with it.
## Find forgotten notes
Discover notes that nothing links to:
```text title="Say this or copy this prompt" theme={null}
Show me all the orphan notes in my Obsidian vault — notes that no other note links to
```
Orphan notes are notes that exist in your vault but are not connected to anything else. They are often forgotten gems — or notes that need to be linked to related content.
Spot links that point to notes that do not exist:
```text title="Say this or copy this prompt" theme={null}
Find all the broken links in my vault — links that point to notes that don't exist
```
This happens when you rename or delete a note but other notes still link to the old name. These are easy to fix once you know about them.
Find notes that do not link to anything else:
```text title="Say this or copy this prompt" theme={null}
Show me dead-end notes — notes that don't link to anything else
```
Dead-end notes might benefit from connections. Could this note link to a related project, person, or topic?
See what links TO a specific note:
```text title="Say this or copy this prompt" theme={null}
What notes link to my note called Meeting Notes - March 15?
```
Backlinks show you the web of connections around a note. If a note has many backlinks, it is an important hub in your vault.
**Orphan notes are not necessarily bad** — but they represent knowledge that is disconnected from the rest of your vault. Consider asking Gemini CLI to link them to related notes so you can find them again naturally.
## Organise your files
**Before moving or renaming files,** ask Gemini CLI to read the note first. This helps you avoid accidentally moving the wrong note.
Preview a note's contents without opening Obsidian:
```text title="Say this or copy this prompt" theme={null}
Read my note called Untitled and show me what's in it
```
This shows you exactly what is in the note so you can decide what to do with it — rename it, move it, or leave it where it is.
Give a vague note a meaningful name:
```text title="Say this or copy this prompt" theme={null}
Rename my note called Untitled to Quick Notes
```
The note is renamed and all internal links that pointed to "Untitled" are automatically updated. Nothing breaks.
Put a note where it belongs:
```text title="Say this or copy this prompt" theme={null}
Move my note called Recipe - Banana Bread into a folder called Recipes
```
Obsidian creates the folder if it does not exist and updates all links that point to this note. Everything stays connected.
See the heading structure without reading the whole note:
```text title="Say this or copy this prompt" theme={null}
Show me the heading structure of my note called Meeting Notes - March 15
```
This is useful for long notes — you can quickly see what sections it contains without scrolling through everything.
See the details about a specific note:
```text title="Say this or copy this prompt" theme={null}
Give me the file info for my note called Quick Notes — when was it created and how big is it?
```
This shows the file path, size, and when it was created and last modified. Handy for finding notes you have not touched in a while.
**When you move or rename a note, Gemini CLI handles link updates automatically.** It runs the right Obsidian commands behind the scenes, and Obsidian updates all internal links that point to the file. Nothing breaks — your vault stays connected.
## Go further — try your own requests
You are not limited to the prompts above. Gemini CLI understands a wide range of natural language requests about your vault. Try these:
```text title="Say this or copy this prompt" theme={null}
Find all notes in my vault that have no tags
```
```text title="Say this or copy this prompt" theme={null}
Which of my notes is the longest? Show me a word count comparison
```
```text title="Say this or copy this prompt" theme={null}
Search my vault for anything related to career and summarise what I've written about it
```
```text title="Say this or copy this prompt" theme={null}
Are there any duplicate note names in my vault?
```
```text title="Say this or copy this prompt" theme={null}
Show me all notes I created this month
```
```text title="Say this or copy this prompt" theme={null}
List all my notes that contain checkbox tasks, and tell me how many are completed vs incomplete
```
**The key insight: you do not need to memorise commands.** Just describe what you want in plain language. Gemini CLI figures out which Obsidian commands to run and handles the details for you.
## Troubleshooting
Make sure the Obsidian CLI plugin is installed and enabled. Run `obsidian version` in a separate terminal window to check. If it does not return a version number, go back to the [setup page](/tutorial/obsidian-organise/setup) and complete Step 3.
This is normal. Gemini CLI asks your permission before running commands on your system. Type `y` and press **Enter** to allow it. You can also type `always` to allow it for the rest of the session.
Wispr Flow may occasionally mishear note names or technical terms. If this happens, try speaking more slowly, or type the prompt instead. You can also correct the transcription before pressing Enter.
Check the note name spelling. Ask Gemini CLI to list all files in your vault to see exact names. Note names do not need file extensions or full paths — just the note title as it appears in Obsidian.
Nice work — your vault is already looking better. Head to [Keep going](/tutorial/obsidian-organise/keep-going) for maintenance habits and more prompts to try.
# Organise Your Notes by Talking to AI
Source: https://herwaka.shesharp.org.nz/tutorial/obsidian-organise/overview
Use natural language through Gemini CLI to search, audit, and organise your Obsidian vault. Speak or type what you want — AI handles the rest. Optionally use Wispr Flow for voice input.
**Difficulty: ★★☆☆☆ Easy** · Estimated time: \~30 to 45 minutes
You have 50+ notes in your vault but you cannot find anything. Your tags are inconsistent, half your notes are in the wrong folder, and you know there is a recipe somewhere but scrolling through folders is not going to find it.
Instead of opening notes one by one, you just say **"Find all my notes about meetings"** or **"Show me notes that nothing links to"** — and AI does the rest.
**That is what we are building.** A natural language workflow where you describe what you want and Gemini CLI searches, audits, and organises your vault for you — no commands to memorise.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## What you will build
Ask for anything — notes about a topic, files with a certain tag, or content matching a phrase
Discover hidden issues — orphan notes, broken links, inconsistent tags, and forgotten files
Tell AI to move, rename, and tidy your vault — it handles the details
## How it works
```mermaid theme={null}
flowchart LR
A["You describe\nthe problem"] --> B["Gemini CLI\nfinds it"]
B --> C["Gemini CLI\nfixes it"]
C --> D["Vault\nimproves"]
```
You describe what you want in plain language (by speaking or typing). Gemini CLI understands your request, runs the right Obsidian commands behind the scenes, and your vault gets cleaner. You never need to learn or type a single raw command.
**You can either speak your prompts using Wispr Flow, or type/paste them into Gemini CLI. Both work exactly the same way.** Wispr Flow is optional — it just makes the experience hands-free. Every prompt in this tutorial works whether you speak it or type it.
## What you will learn
* How to search your entire vault instantly by asking in plain language
* How to audit tags, orphan notes, and broken links by describing what you want to find
* How to move and rename files by telling AI what to do
* How to check backlinks and understand how your notes are connected
* How to use voice input with Wispr Flow for a hands-free workflow
* How to build a vault maintenance habit you can repeat monthly
**No coding required.** Every prompt in this tutorial is something you say or copy. If you can describe what you want, you can do this.
## Tools
Google's free AI assistant that runs in your terminal. It understands your natural language requests and translates them into Obsidian actions.
Optional voice input tool — speak instead of type. Works in any application, including your terminal.
A free note-taking app that stores your notes as plain text files on your computer. Your data stays with you.
Required to install Gemini CLI. Free and quick to set up.
## Cost
| Tool | Cost |
| ---------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Free (1,000 requests/day) |
| Wispr Flow | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| Obsidian | Free |
| Node.js | Free |
| Terminal | Free (built into your computer) |
| **Total** | **\$0** |
## Prerequisites
Windows or macOS. No special hardware needed.
Take your time — there is no rush. You can pause and come back.
If you completed the [Voice-Control Your Notes](/tutorial/obsidian-daily/overview) tutorial, you are already set up. Otherwise, we will walk you through it.
Ready to get started? Head to [Set up your tools](/tutorial/obsidian-organise/setup) to get everything ready.
# Set up your tools
Source: https://herwaka.shesharp.org.nz/tutorial/obsidian-organise/setup
Install Gemini CLI, Obsidian with the CLI plugin, and optionally Wispr Flow for voice input. Then verify everything works by talking to your vault.
Before we start organising, let's make sure all your tools are installed and working.
**You will need:** a laptop and Obsidian installed with the CLI plugin enabled. No coding experience is required — we will guide you through every step.
**Already set up?** If you completed the [Voice-Control Your Notes](/tutorial/obsidian-daily/overview) tutorial, you are already set up! Skip to Step 5 to check your vault.
**Already have Node.js?** If you installed it for a previous tutorial, skip this step. Run `node --version` in your terminal to check — you should see a version number like `v22.x.x`.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
**Already have Gemini CLI?** If you installed it for a previous tutorial, skip this step. Just run `gemini` in your terminal to check it still works.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
**Already done this?** If you installed the Obsidian CLI plugin in a previous tutorial, skip this step. Run `obsidian version` in your terminal to check — you should see a version number.
Obsidian is a free note-taking app that stores your notes as plain text files on your computer. The CLI lets you control it from the terminal.
1. Go to [obsidian.md/download](https://obsidian.md/download) and click **Download for Windows**
2. Run the installer and follow the prompts
3. Open Obsidian — if this is your first time, click **Create new vault**, give it a name (e.g. "My Notes"), and choose where to save it
1. Go to [obsidian.md/download](https://obsidian.md/download) and click **Download for macOS**
2. Drag Obsidian to your **Applications** folder
3. Open Obsidian — if this is your first time, click **Create new vault**, give it a name (e.g. "My Notes"), and choose where to save it
**Already have Obsidian?** Make sure you are running version **1.12.4 or later**. Go to **Settings** → **General** → check the version number at the top. If you need to update, download the latest installer from [obsidian.md/download](https://obsidian.md/download).
Now enable the CLI:
1. In Obsidian, open **Settings** (gear icon in the bottom-left)
2. Go to **General**
3. Find **Command line interface** and toggle it **on**
4. Follow the prompt to register the CLI
5. **Close and reopen your terminal** for the changes to take effect
Test it by opening your terminal and typing:
```bash theme={null}
obsidian help
```
You should see a list of available commands. If you do, the CLI is ready.
Restart your terminal after enabling the CLI — the PATH changes only take effect in new terminal windows.
**macOS:** Check that your `~/.zprofile` file contains this line:
```bash theme={null}
export PATH="$PATH:/Applications/Obsidian.app/Contents/MacOS"
```
If it is missing, add it manually, then restart your terminal.
**Windows:** Make sure you are using the Obsidian 1.12.4+ installer. The installer adds a terminal redirector that allows the CLI to work. If the command still isn't found, try restarting your computer.
The CLI connects to the running Obsidian app. Make sure Obsidian is open before running CLI commands. If Obsidian is not running, the first CLI command should launch it automatically — but this may take a few seconds.
By default, the CLI uses the vault in your current terminal directory, or the most recently active vault. To target a specific vault, add `vault=` before your command:
```bash theme={null}
obsidian vault="My Notes" help
```
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
Let's make sure Gemini CLI can talk to your Obsidian vault. Start Gemini CLI:
```bash title="Copy this command" theme={null}
gemini
```
Then say or type this prompt:
```text title="Say this or copy this prompt" theme={null}
How many files and folders are in my Obsidian vault?
```
Gemini CLI should return information about your vault — the number of files, folders, and possibly the vault name and path. If it does, everything is connected.
**Multiple vaults?** If you have more than one vault, Obsidian CLI uses your default vault. You can switch vaults in the Obsidian app settings.
If you have a fresh vault with no notes, give Gemini CLI these prompts one at a time. This creates sample notes so the tutorial has material to work with.
```text title="Say this or copy this prompt" theme={null}
Create a note in Obsidian called 'Meeting Notes - March 15' with a heading Team Meeting, some discussion points about the project timeline, two checkbox tasks about reviewing the budget and sending an update to Sarah, and tag it with meeting and work
```
```text title="Say this or copy this prompt" theme={null}
Create a note called 'Recipe - Banana Bread' with ingredients list and tag it recipe and baking
```
```text title="Say this or copy this prompt" theme={null}
Create a note called 'Book Notes' with a reading list of Atomic Habits and The Lean Startup, tagged books and reading
```
```text title="Say this or copy this prompt" theme={null}
Create a note called 'Project Ideas' with three career-related ideas, tagged ideas and career
```
```text title="Say this or copy this prompt" theme={null}
Create a note called 'Untitled' with some random unstructured text and no tags
```
**Already have notes?** Skip this step. These sample notes are only for people starting with an empty vault so the tutorial has something to work with.
## Verify your setup
Running `node --version` in your terminal shows a version number.
Running `gemini` in your terminal starts the AI assistant and shows a prompt where you can type.
Running `obsidian version` in your terminal shows a version number.
Asking Gemini CLI about your vault returns file and folder counts.
You can speak and see text appear in your terminal.
All set? Head to [Search, audit, and organise](/tutorial/obsidian-organise/organise) to start exploring your vault.
# HER WAKA Tutorials
Source: https://herwaka.shesharp.org.nz/tutorial/overview
Self-paced tutorials for building real projects with AI — speak or type what you want, and AI does the rest. No coding required.
Learn by building real projects. These self-paced tutorials teach you how to work with AI tools — by speaking naturally or typing prompts. No prior coding experience required.
**All tutorials support voice input.** Use [Wispr Flow](https://wisprflow.ai/r?CHAN115) to speak your prompts instead of typing them. It is optional — every prompt works whether you speak it or type it.
## Why CLI tools?
These tutorials use **Gemini CLI** as the main AI tool because it is completely free and teaches you how to work with AI in the terminal — a skill that transfers directly to professional tools like **Claude Code**.
CLI (command-line) tools are better for **delegation** — you describe what you want, and AI does the work autonomously. GUI (click-based) tools are better for **suggestion** — they help you while you do the work yourself. In these tutorials, we want AI to do the heavy lifting, so CLI is the right choice.
**Your learning path:** Learn the fundamentals with Gemini CLI (free), then graduate to Claude Code (professional, same workflow). By the time you reach the Vibe Coding tutorial, you will already know how to speak to an AI in the terminal, approve tool calls, and work with extensions — because you learned it all with Gemini CLI.
## ★ Getting Started
The quickest tutorials — minimal setup, immediate results.
**★☆☆☆☆ · \~5–20 minutes**
Say "summarise my unread emails" and AI reads your Gmail inbox and tells you what matters — in seconds.
**★☆☆☆☆ · \~30 minutes**
Capture thoughts, track tasks, and review your day by speaking naturally — Gemini CLI + Wispr Flow control Obsidian for you.
## ★★ Easy
A bit more setup, but still straightforward and beginner-friendly.
**★★☆☆☆ · \~1 hour**
Describe what you want your website to look like — by speaking or typing — and Gemini CLI builds and deploys it for you.
**★★☆☆☆ · \~30–45 minutes**
Ask "is my bus running late?" and AI checks real-time Auckland Transport data and gives you plain English advice.
**★★☆☆☆ · \~30–45 minutes**
Say "find my orphan notes" or "move this note to Archive" — AI searches, audits, and tidies your Obsidian vault.
**★★☆☆☆ · \~25–30 minutes**
AI gathers your calendar agenda, related emails, and shared documents into a single briefing — never walk into a meeting unprepared.
**★★☆☆☆ · \~15–20 minutes**
One command gives you today's meetings, urgent emails, and a standup-ready summary — powered by Gemini CLI + Google Workspace CLI.
## ★★★ Intermediate
More tools to install and configure, but the AI still does the heavy lifting.
**★★★☆☆ · \~1.5 hours**
Describe your ideal cover letter, invoice, or report — Gemini CLI + Typst turns your words into a polished PDF.
**★★★☆☆ · \~30 minutes**
Tell AI to read an email, create a calendar event, and write notes to Google Docs — all in one command, powered by Google Workspace CLI.
## ★★★★ Challenging
External API tokens, MCP configuration, and more complex setup — building confidence for advanced projects.
**★★★★☆ · \~45 minutes**
Say "summarise #general for this week" and AI reads your Slack messages and gives you a clear, useful summary.
**★★★★☆ · \~1.5–2 hours**
Describe the video you want — AI creates it with animated text, professional voiceover, and sound effects. Export as MP4 for LinkedIn, Instagram, or anywhere.
## ★★★★★ Advanced
Multiple tools, APIs, and deployment — a real engineering project guided by AI.
**★★★★★ · \~2 hours**
Describe the bot you want to build — by speaking or typing — and Claude Code writes all the code, tests, and deployment for you.
## Your progression
```mermaid theme={null}
flowchart LR
A["★ Getting Started\nGemini CLI basics"] --> B["★★ Easy\nCLI + APIs & tools"]
B --> C["★★★ Intermediate\nCross-app workflows"]
C --> D["★★★★ Challenging\nExternal APIs + MCP"]
D --> E["★★★★★ Advanced\nClaude Code"]
```
Each tutorial builds your CLI skills. By the time you reach Vibe Coding, speaking to an AI in the terminal will feel natural — because you have been doing it since your first tutorial.
**New to AI tools?** Start with Summarise Gmail or Voice-Control Your Notes — they are the quickest to set up and deliver instant results. All tutorials support voice input with Wispr Flow.
## Going deeper: multi-week series
Ready for something bigger than a single task? The series below takes you across 8 weeks plus a 4-week capstone, building one cumulative AI-powered portfolio site.
A complete 8-week + 4-week-capstone bootcamp. By the end you own one live AI-powered portfolio site with auth, database, file storage, blog, real-time alerts, and AI-generated CV downloads. Every week ships as a downloadable PDF lecture.
# Build Your Website
Source: https://herwaka.shesharp.org.nz/tutorial/personal-website/build-website
Use Gemini CLI to design and build your personal website — just describe what you want by speaking or typing and let AI write the code.
This is the fun part. You'll describe what you want, and Gemini CLI will build it for you. No coding required — just clear descriptions, spoken or typed.
With Wispr Flow running, just start speaking. Your words appear as text in Gemini CLI automatically. Say what you need naturally — Gemini understands and writes the code for you.
Copy any prompt from this page and paste it into Gemini CLI. Or type your own request in natural language. No special syntax needed — just describe what you want.
## The Vibe Coding Loop
Every step follows the same pattern:
```mermaid theme={null}
flowchart LR
A["You describe\nwhat you want"] -->|"speak or type"| B["Gemini CLI\nbuilds it"]
B -->|"you review"| C{"Happy?"}
C -->|"Not quite"| A
C -->|"Yes!"| D["Next step"]
```
You describe. Gemini CLI builds. You review. Repeat until it's right, then move on.
***
1. Open **File Explorer**
2. Go to your **Documents** folder
3. Right-click in an empty space → **New** → **Folder**
4. Name it `my-website`
1. Open **Finder**
2. Go to your **Documents** folder
3. Right-click in an empty space → **New Folder**
4. Name it `my-website`
Name it something simple like `my-website`. Use lowercase letters with no spaces — this will become part of your website URL later.
Open your `my-website` folder in File Explorer. Click the **address bar** at the top, type `powershell`, and press **Enter**.
Right-click the `my-website` folder in Finder and select **"Open Terminal at Folder"**. If you don't see this option, open Terminal and type:
```bash theme={null}
cd ~/Documents/my-website
```
In your terminal, type:
```bash theme={null}
gemini
```
Press Enter. You should see Gemini CLI start up with a prompt ready for your input.
**If you have Wispr Flow running**, you can now speak directly into Gemini CLI. Just start talking — your words will appear as text in the terminal.
Pick the style that appeals to you and say or copy the entire prompt into Gemini CLI. Replace `[Your Name]` and `[your field]` with your real information!
```text title="Say this or copy this prompt" theme={null}
Create a simple personal website for me. My name is [Your Name].
I want a clean, modern design with:
- A hero section with my name and a short tagline
- An "About Me" section where I can introduce myself
- A "Contact" section with links to my email and LinkedIn
Use a single index.html file with inline CSS. Make it responsive
so it looks good on both desktop and mobile phones.
Use a professional color scheme. Make it look polished and modern.
```
```text title="Say this or copy this prompt" theme={null}
Create a personal portfolio website for me. My name is [Your Name].
I want a modern, eye-catching design with:
- A bold hero section with a gradient background and my name
- An "About Me" section with a circular photo placeholder
- A "Skills" section showing my top skills with visual indicators
- A "Projects" section with 3 placeholder project cards
- A footer with social media icon links
Use HTML and CSS. Make it fully responsive for mobile devices.
Add smooth scroll behavior and subtle hover animations on buttons
and cards. Use a vibrant but professional color palette.
```
```text title="Say this or copy this prompt" theme={null}
Create a professional resume-style website. My name is [Your Name].
I am looking for work in [your field]. Include these sections:
- Professional header with my name, job title, and a brief summary
- Work Experience section (use placeholder content for 2-3 roles)
- Education section (use placeholder content)
- Skills section organized by category
- Contact section with email, LinkedIn, and phone placeholder
Use HTML and CSS. Make it clean, minimal, and employer-friendly.
Use a neutral, professional color scheme (navy blue or dark gray).
Make it responsive and print-friendly so it can be saved as a PDF.
```
**Remember to replace `[Your Name]` and `[your field]`** with your actual information before pasting the prompt! If you are speaking with Wispr Flow, just say your real name and field naturally.
Don't like the result? Just tell Gemini what to change — see Step 6 for ready-to-use follow-up prompts.
Say or type this prompt:
```text title="Say this or copy this prompt" theme={null}
Can you help me open this website in my browser so I can preview it?
Please start a local server or just open the index.html file directly.
```
**Or do it yourself:** find `index.html` in your `my-website` folder and double-click it. It will open in your browser.
Your website is only on your computer right now — not on the internet yet. We'll publish it in the next section.
Not happy with the result? That's normal — and that's the whole point of vibe coding! Say or copy any of these follow-up prompts into Gemini CLI:
```text title="Say this or copy this prompt" theme={null}
Change the color scheme to blue and white. Keep the overall layout the same.
```
```text title="Say this or copy this prompt" theme={null}
Add a profile photo section with a round border at the top of the page.
Use a placeholder image for now.
```
```text title="Say this or copy this prompt" theme={null}
Add a sticky navigation bar at the top with links to each section
of the page. It should stay visible when I scroll down.
```
```text title="Say this or copy this prompt" theme={null}
Add a dark mode toggle button in the top-right corner. When clicked,
it should switch the entire website between light and dark themes.
Save the user's preference so it persists when they refresh the page.
```
**The vibe coding loop:** describe → review → refine. Keep going until you love it! You can send as many prompts to Gemini CLI as you want — there's no limit on iterations. Speaking your requests often feels faster and more natural than typing them.
## Go Further — Try Your Own Requests
The prompts above are just the beginning. Here are some creative requests to show how flexible natural language is:
```text title="Say this or copy this prompt" theme={null}
Add a testimonials section with 3 placeholder quotes from colleagues.
Use a card layout with a subtle shadow on each card.
```
```text title="Say this or copy this prompt" theme={null}
Add a timeline section showing my career journey. Use placeholder
dates and roles. Make it visually interesting with a vertical line
connecting each milestone.
```
```text title="Say this or copy this prompt" theme={null}
Make the hero section more dramatic — add a background image with a
dark overlay and large white text. Use a placeholder image for now.
```
**This is the magic of natural language.** You do not need to know HTML or CSS — just describe what you want. If Gemini is not sure what you mean, it will ask you to clarify.
## Troubleshooting
Make sure you're opening the `index.html` file, not a folder. If the file is empty, ask Gemini CLI: "The index.html file appears to be empty. Can you check and regenerate it?"
Ask Gemini CLI to fix it:
```text theme={null}
The layout looks broken — things are overlapping or not aligned properly.
Can you fix the CSS so everything displays correctly?
```
Tell Gemini CLI:
```text theme={null}
I want to start completely fresh. Delete the current files and create
a new website from scratch. [Then describe what you want]
```
Wispr Flow may occasionally mishear technical terms or proper nouns. You can review and correct the text in Gemini CLI before pressing Enter. If voice input is causing too many errors, switch to typing or pasting prompts instead.
Happy with your website? Head to [Deploy your website](/tutorial/personal-website/deploy) to put it on the internet for free!
# Deploy Your Website
Source: https://herwaka.shesharp.org.nz/tutorial/personal-website/deploy
Publish your website to the internet for free using GitHub Pages — with step-by-step instructions and prompts you can speak or copy.
Your website works on your computer. Let's put it on the internet — for free.
Your website address will be `yourusername.github.io/my-website` — replace `yourusername` with your GitHub username.
Make sure Gemini CLI is running in your `my-website` folder. Then say or type this prompt:
```text title="Say this or copy this prompt" theme={null}
I want to put this website on GitHub so I can host it with GitHub
Pages for free. Please do the following:
1. Initialize a git repository in this folder
2. Create a new PUBLIC repository on my GitHub account called "my-website"
3. Add all my files and make the first commit
4. Push everything to the new GitHub repository
5. Show me the URL of the repository when you're done
I already have git and the GitHub CLI (gh) installed and logged in.
```
The repository must be **public** for free GitHub Pages hosting. This is standard practice for personal websites — your code will be visible to others, just like most websites on the internet.
Say or type this prompt into Gemini CLI:
```text title="Say this or copy this prompt" theme={null}
Now I want to enable GitHub Pages for this repository so my website
goes live on the internet. Please:
1. Enable GitHub Pages, deploying from the main branch
2. The website files are in the root of the repository (not a subfolder)
3. Tell me the URL where my website will be available
4. Check if the deployment is successful
My GitHub username is [your-username].
```
Replace `[your-username]` with your actual GitHub username.
1. Go to your repository on GitHub (e.g. `github.com/yourusername/my-website`)
2. Click **Settings** (the gear icon tab)
3. In the left sidebar, click **Pages**
4. Under **Source**, select **Deploy from a branch**
5. Choose **main** branch and **/ (root)** folder
6. Click **Save**
GitHub needs 1–3 minutes to build and publish your website.
1. Wait about 2 minutes
2. Open your browser and go to: `https://yourusername.github.io/my-website`
3. Replace `yourusername` with your GitHub username
**Seeing a 404 page?** Don't worry — wait another minute and refresh. First deployments can take up to 3 minutes.
You can also ask Gemini CLI to check for you:
```text title="Say this or copy this prompt" theme={null}
Can you check if my GitHub Pages deployment is complete? Please check
the deployment status of my repository and tell me when my website
is live. Also give me the exact URL to visit.
```
1. Go to your repository on GitHub
2. Look for a **green checkmark** next to the latest commit — this means the deployment succeeded
3. Go to **Settings** → **Pages** to see your live website URL
1) Go to `github.com/yourusername/my-website`
2) Click **Settings** (gear icon tab)
3) Click **Pages** in the left sidebar
4) Your live URL is shown at the top: `https://yourusername.github.io/my-website`
## Troubleshooting
* **Wait a few minutes** — first deployments take up to 3 minutes
* Make sure the URL is correct: `https://yourusername.github.io/my-website`
* Check that your repository has an `index.html` file in the root (not inside a subfolder)
* Go to Settings → Pages and make sure the source is set to the **main** branch and **/ (root)**
* Make sure the repository is **public**, not private
* Check your spelling — the URL is case-sensitive
* Run `gh repo list` in your terminal to see your repositories
* GitHub Pages is only available for **public** repositories on the free plan
* If your repository is private, go to Settings → General → Danger Zone → **Change visibility** to public
**Your website is live!** Share the link with friends, family, and on LinkedIn. You built this!
Want to keep improving your website? Head to [Keep going](/tutorial/personal-website/keep-going) for ideas, update instructions, and next steps.
# Set Up GitHub
Source: https://herwaka.shesharp.org.nz/tutorial/personal-website/github-account
Create a GitHub account and use Gemini CLI to install git and GitHub CLI — everything you need to publish your website.
GitHub is a free website where your code will live — and where your website will be hosted for free. Let's get you set up.
1. Go to [github.com](https://github.com)
2. Click **Sign up**
3. Follow the prompts to create your account (the free plan is all you need)
**Choose your username carefully!** It becomes part of your website address: `yourusername.github.io`. Pick something professional or memorable.
Git is a tool that tracks changes to your code. Instead of installing it manually, let's ask Gemini CLI to do it for us!
Open your terminal, type `gemini`, and press Enter. Then say or type this prompt:
```text title="Say this or copy this prompt" theme={null}
I need to install git on my computer. Please:
1. Check if git is already installed
2. If not, download and install it for me
3. After installation, verify it works by running "git --version"
4. Configure git with a default user name and email — ask me what
name and email to use
I am a complete beginner, so please explain each step as you go.
```
Gemini CLI will likely download git from [git-scm.com](https://git-scm.com) and run the installer for you. It may ask you to confirm a few installation prompts. After installation, it will set up your name and email for git.
Gemini CLI will likely use Xcode Command Line Tools or Homebrew to install git. On macOS, git may already be installed. After confirming, it will set up your name and email for git.
**Verify it worked** — in your terminal, type:
```bash theme={null}
git --version
```
You should see a version number like `git version 2.x.x`.
GitHub CLI (`gh`) is a tool that lets you interact with GitHub from your terminal. Gemini CLI will install it and help you log in.
In Gemini CLI, say or type this prompt:
```text title="Say this or copy this prompt" theme={null}
Now I need to install the GitHub CLI tool (called "gh") and log in
to my GitHub account. Please:
1. Install the GitHub CLI on my computer
2. Help me log in to my GitHub account using "gh auth login"
3. Choose the browser-based login method so I can sign in easily
4. After login, verify it works by running "gh auth status"
I am a complete beginner, so please guide me through each step.
```
**Verify it worked** — in your terminal, type:
```bash theme={null}
gh auth status
```
You should see a message confirming you're logged in to GitHub.
**GitHub Pages is free but requires public repositories.** This means your website code will be visible to others. This is completely normal for personal websites — most websites on the internet have publicly visible source code.
**Setup is done — now the fun part begins.** From here on, you will be speaking or typing natural language to Gemini CLI to build your entire website. No more manual installation steps!
## Verify Your Setup
Run `git --version` in your terminal. You should see a version number.
Run `gh --version` in your terminal. You should see a version number.
Run `gh auth status` in your terminal. It should say you're logged in.
All set? Head to [Build your website](/tutorial/personal-website/build-website) — the fun part!
# Keep Going
Source: https://herwaka.shesharp.org.nz/tutorial/personal-website/keep-going
Update your website, explore new ideas, install Agent Skills, and reflect on your voice-first vibe coding experience.
Congratulations — you built and deployed your own website without writing a single line of code! Let's look at what you achieved, how to keep improving, and where to go next.
## What You Built
```mermaid theme={null}
flowchart LR
A["Described your\nwebsite by\nvoice or text"] --> B["Gemini CLI\nwrote the code"]
B --> C["Previewed\nlocally"]
C --> D["Pushed to\nGitHub"]
D --> E["Live on\nGitHub Pages"]
```
A personal website that:
* Was designed by you and built by AI — using your voice or keyboard
* Is live on the internet for anyone to visit
* Can be updated anytime with a single spoken or typed prompt
* Cost you absolutely nothing
## What You Learned
**The skill that matters most isn't coding — it's communication.** You learned to describe what you want clearly, review the result, and iterate until it's right. Whether you spoke your prompts or typed them, the core skill is the same — and it works with any AI tool, in any field.
Here's what you practised:
* **Using the terminal** — running commands and navigating folders
* **Talking to AI** — speaking or writing clear prompts that get the result you want
* **Iterating** — refining your website step by step
* **Using git and GitHub** — storing code and deploying a website
* **Problem solving** — describing issues and letting AI help fix them
***
## How to Update Your Website
Whenever you want to make changes to your website:
Navigate to your `my-website` folder and open a terminal there (just like you did before).
```bash theme={null}
gemini
```
Say or type what you want to update — just like you did when building.
```text title="Say this or copy this prompt" theme={null}
I've made changes to my website. Please:
1. Add all changed files to git
2. Create a commit with a descriptive message
3. Push the changes to GitHub
My website should automatically update on GitHub Pages in 1-2 minutes.
```
***
## Ideas to Try
Create a blog section with posts you can update over time.
Use your own domain name (like `yourname.com`) instead of `github.io`.
Add scroll animations and transitions to make your site feel alive.
Let visitors switch between light and dark themes.
Here are ready-to-use prompts for each idea — say them or copy them into Gemini CLI:
```text title="Say this or copy this prompt" theme={null}
Add a blog section to my website. I want:
- A "Blog" page linked from the navigation
- A list of blog posts with titles, dates, and short previews
- Create 2 sample blog posts with placeholder content
- Each blog post should have its own page with full content
- Add a "Back to blog" link on each post page
Make it match the existing design of my website.
```
```text title="Say this or copy this prompt" theme={null}
I want to use a custom domain for my GitHub Pages website.
My domain is [your-domain.com]. Please:
1. Create a CNAME file in my repository with my domain
2. Tell me what DNS records I need to set up with my domain provider
3. Explain how to verify it's working
```
```text title="Say this or copy this prompt" theme={null}
Add smooth scroll animations to my website. I want sections to
fade in and slide up as the user scrolls down the page. Use CSS
animations with a JavaScript Intersection Observer — no external
libraries. Keep it subtle and professional.
```
```text title="Say this or copy this prompt" theme={null}
Add a dark mode toggle button in the top-right corner of my website.
When clicked, it should switch the entire website between light and
dark themes. Save the user's preference in localStorage so it
persists when they refresh the page. Make sure all text remains
readable in both modes.
```
***
## Supercharge Your AI: Agent Skills
Think of skills as superpowers you can install to make Gemini CLI even smarter at specific tasks.
Skills are based on the open [Agent Skills](https://agentskills.io) standard. Gemini automatically detects when a skill is relevant and activates it.
### How Skills Work
```mermaid theme={null}
flowchart LR
A["You install\na skill"] --> B["Gemini detects\nwhen it's needed"]
B --> C["Skill activates\nautomatically"]
```
### Installing Skills
```text title="Say this or copy this prompt" theme={null}
Show me how to list and manage Agent Skills in Gemini CLI.
Run the command to list all currently installed skills.
```
```text title="Say this or copy this prompt" theme={null}
I want to install an Agent Skill for Gemini CLI. Please help me
install a skill from this repository: [paste skill repo URL here]
Use the "gemini skills install" command.
```
```text title="Say this or copy this prompt" theme={null}
I have a skill directory on my computer at [path]. Please help me
install it as a Gemini CLI Agent Skill using "gemini skills install".
```
### Try It: Install the Frontend Design Skill
Now let's install a real skill that will make a noticeable difference in your projects. The **frontend-design** skill teaches Gemini CLI to create distinctive, polished web interfaces instead of generic-looking output. It comes from Anthropic's open-source [skills library](https://github.com/anthropics/skills).
Run this command in your terminal:
```bash theme={null}
gemini skills install https://github.com/anthropics/skills.git --path skills/frontend-design
```
Now ask Gemini to redesign your personal website using its new skill:
```text title="Say this or copy this prompt" theme={null}
Redesign my personal website with a more polished, distinctive look.
Use thoughtful typography, a cohesive color palette, subtle animations,
and creative spatial composition. Avoid generic or cookie-cutter AI aesthetics.
```
The frontend-design skill focuses on **typography** choices, **color** themes, **motion and animation**, **spatial composition**, and **backgrounds** — guiding Gemini to produce designs that feel intentional and crafted rather than template-driven.
Behind the scenes, the skill provides Gemini with design guidelines including:
* **Typography** — Use distinctive font pairings instead of defaults; vary weight, size, and spacing for visual hierarchy
* **Color** — Build cohesive color themes with purposeful contrast and accent colors, not generic palettes
* **Motion & animation** — Add subtle transitions and micro-interactions that feel natural and enhance usability
* **Spatial composition** — Use asymmetric layouts, intentional whitespace, and layered depth instead of rigid grids
* **Backgrounds & texture** — Incorporate gradients, patterns, or subtle textures to add richness and depth
These guidelines activate automatically whenever Gemini detects a frontend task.
This skill comes from Anthropic's open-source [Agent Skills repository](https://github.com/anthropics/skills) and follows the [Agent Skills open standard](https://agentskills.io). You can browse the repository for more skills or even create your own!
### Managing Skills
```bash theme={null}
gemini skills list
```
```bash theme={null}
gemini skills install https://github.com/user/repo.git
```
```bash theme={null}
gemini skills install https://github.com/org/repo.git --path skills/frontend-design
```
```bash theme={null}
gemini skills install /path/to/my-expertise.skill
```
```bash theme={null}
gemini skills enable my-skill
```
```bash theme={null}
gemini skills disable my-skill
```
```bash theme={null}
gemini skills uninstall my-skill
```
**In-session commands:** While chatting with Gemini CLI, you can type `/skills list` to see all available skills, `/skills enable ` to enable one, or `/skills disable ` to turn one off.
### Key Concepts
`.gemini/skills/` — shared with your team via git
`~/.gemini/skills/` — personal skills across all projects
Bundled with installed extensions
Skills are like apps for your AI. The more relevant skills you install, the smarter Gemini CLI becomes for your specific needs. Explore [agentskills.io](https://agentskills.io) for community-shared skills.
***
## Reflect
Take a few minutes to think about your experience:
Many people are surprised by how much can be accomplished just by describing what they want clearly — whether spoken or typed. Was there a moment where Gemini CLI's output exceeded your expectations? What about a moment where you had to refine your prompt?
If you tried Wispr Flow, did speaking your prompts feel different from typing them? Many people find that speaking produces more natural, detailed descriptions — which often leads to better results from AI. Think about where else voice input could speed up your workflow.
Think about your job or job search. Could you use a personal website as an online portfolio? Could you automate parts of your workflow with AI tools? What other projects could you build?
Now that you know the workflow — describe, build, review, iterate — what else could you create? A portfolio for your work? A website for a small business? A tool that helps with your daily tasks?
***
## Resources
| Resource | Description | Link |
| ----------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------- |
| Gemini CLI docs | Official documentation for Gemini CLI | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| Wispr Flow | Voice input for any application | [wisprflow.ai](https://wisprflow.ai) |
| GitHub Pages docs | Learn more about hosting websites on GitHub | [docs.github.com/pages](https://docs.github.com/en/pages) |
| Agent Skills | Open standard for AI agent skills | [agentskills.io](https://agentskills.io) |
| Unsplash | Free high-quality photos for your website | [unsplash.com](https://unsplash.com) |
| Google Fonts | Free fonts to customise your website typography | [fonts.google.com](https://fonts.google.com) |
| Coolors | Generate beautiful colour schemes | [coolors.co](https://coolors.co) |
Thank you for completing this tutorial! You've gone from zero to a live personal website — and more importantly, you've learned how to work with AI to build real things, using your voice or keyboard. Take these skills with you into your next project.
# Build Your Personal Website with AI
Source: https://herwaka.shesharp.org.nz/tutorial/personal-website/overview
Build and deploy your own personal website — without learning to code. Just describe what you want your website to look like, by speaking or typing, and AI builds it for you.
**Difficulty: ★★☆☆☆ Easy** · Estimated time: \~1 hour
Imagine having your own website, live on the internet, that you built yourself — without learning to code. Just describe what you want your website to look like — by speaking or typing — and AI builds it for you.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## What You Will Build
Say or type what your dream website should look like — in plain language
Gemini CLI writes all the HTML and CSS for you
Publish it for free on GitHub Pages
## How It Works
```mermaid theme={null}
flowchart LR
A["You describe\nwhat you want"] -->|"speak or type"| B["Gemini CLI\nwrites the code"]
B -->|"you review"| C{"Happy?"}
C -->|"Not quite"| A
C -->|"Yes!"| D["Deploy to\nGitHub Pages"]
```
You describe what you want in plain language — by speaking with Wispr Flow or typing into the terminal. Gemini CLI writes the code. You review the result and refine until you love it. Then you deploy it to the internet — for free.
**You can either speak your prompts using Wispr Flow, or type/paste them into Gemini CLI. Both work exactly the same way.** Wispr Flow is optional — it just makes the experience hands-free. Every prompt in this tutorial works whether you speak it or type it.
## What You Will Learn
This tutorial focuses on **communication skills with AI**, not coding knowledge. You will learn how to:
* Describe what you want clearly so AI can build it — by voice or text
* Use the terminal to run commands (it's easier than you think)
* Preview a website on your computer before publishing
* Use GitHub to store your code and host your website
* Iterate and refine — the core skill of working with AI
**No coding required.** Gemini CLI writes the code — your job is to describe what you want. If you can explain an idea to a friend, you can build a website.
## Tools
Google's free AI assistant that runs in your terminal. It understands your natural language requests and translates them into code.
Optional voice input tool — speak instead of type. Works in any application, including your terminal.
A free tool needed to install Gemini CLI. One-time setup.
## Cost
| Tool | Cost |
| --------------------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Free (1,000 requests/day) |
| Node.js | Free |
| GitHub Pages | Free (public repos) |
| Wispr Flow (optional) | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| **Total** | **\$0** |
## Prerequisites
Windows or macOS. No special hardware needed.
Take your time — there's no rush. You can pause and come back anytime.
Ready to get started? Head to [Set up your tools](/tutorial/personal-website/setup-tools) to install everything you need.
# Set Up Your Tools
Source: https://herwaka.shesharp.org.nz/tutorial/personal-website/setup-tools
Install Node.js, learn to open your terminal, set up Gemini CLI, and optionally install Wispr Flow for voice input — everything you need before building your website.
Before we start building, let's get your tools ready. This page walks you through each step.
**You will need:** a laptop with internet access. No coding experience is required — we will guide you through every step.
## Step-by-Step Setup
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
**Why voice input?** Throughout this tutorial, you will be giving instructions to Gemini CLI in natural language. With Wispr Flow, you can speak those instructions instead of typing them — it feels like having a conversation with your AI assistant.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
The terminal is a program where you type commands. It looks like a dark window with text — this is completely normal. Don't be intimidated!
1. Press the **Windows key** on your keyboard
2. Type **PowerShell**
3. Click **Windows PowerShell** in the search results
You'll see a dark blue window with a blinking cursor. That's your terminal!
1. Press **Cmd + Space** to open Spotlight
2. Type **Terminal**
3. Press **Enter**
You'll see a window with a blinking cursor. That's your terminal!
The terminal is where you'll type commands to install tools and talk to AI. You'll be using it a lot in this tutorial — keep it open!
Later in this tutorial, you'll need to open a terminal inside your project folder. Here's how:
**Windows:** Open the folder in File Explorer. Click the address bar at the top, type `powershell`, and press Enter. A terminal opens right in that folder.
**macOS:** Open Finder and navigate to the folder. Right-click the folder and select **"Open Terminal at Folder"**. If you don't see this option, you can open Terminal normally and type `cd ` (with a space), then drag the folder into the Terminal window and press Enter.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
## Verify Your Setup
Before moving on, check that everything is ready:
Run `node --version` in your terminal. You should see a version number.
You can open a terminal window and type commands.
Run `gemini` in your terminal. It starts up and shows a prompt where you can type.
Gemini CLI is connected to your Google account.
If you installed it, you can dictate text in any application. Try speaking a sentence in a text editor to confirm it works.
All set? Head to [Set up GitHub](/tutorial/personal-website/github-account) to create your GitHub account and install the tools you need for deployment.
# Build Your First PDF
Source: https://herwaka.shesharp.org.nz/tutorial/professional-pdf/build-first-pdf
Use a Typst template and Gemini CLI to create a professional cover letter PDF — describe what you want by speaking or typing, and AI builds it for you.
This is the fun part. You'll start from a professionally designed template, use Gemini CLI to customise it, and compile it into a polished PDF. No coding required — just clear descriptions, spoken or typed.
**You can either speak your prompts using Wispr Flow, or type/paste them into Gemini CLI. Both work exactly the same way.** Wispr Flow is optional — it just makes the experience hands-free. Every prompt in this tutorial works whether you speak it or type it.
## The Vibe Coding Loop
Every step follows the same pattern:
```mermaid theme={null}
flowchart LR
A["You speak\nor type"] -->|"Wispr Flow\n(optional)"| B["Gemini CLI\ncustomises it"]
B -->|"compile"| C["Typst creates\nyour PDF"]
C -->|"review"| D{"Happy?"}
D -->|"Not quite"| B
D -->|"Yes!"| E["Done!"]
```
Describe what you want. Gemini CLI customises the template. Typst compiles it to PDF. Review and repeat until it's perfect.
***
1. Open **File Explorer**
2. Go to your **Documents** folder
3. Right-click in an empty space → **New** → **Folder**
4. Name it `my-pdfs`
1. Open **Finder**
2. Go to your **Documents** folder
3. Right-click in an empty space → **New Folder**
4. Name it `my-pdfs`
Name it something simple like `my-pdfs`. Use lowercase letters with no spaces.
Open your `my-pdfs` folder in File Explorer. Click the **address bar** at the top, type `powershell`, and press **Enter**.
Right-click the `my-pdfs` folder in Finder and select **"Open Terminal at Folder"**. If you don't see this option, open Terminal and type:
```bash theme={null}
cd ~/Documents/my-pdfs
```
Typst has a library of free, community-made templates called [Typst Universe](https://typst.app/universe). We'll start with **fireside** — a clean, modern cover letter template.
In your terminal, run:
```bash title="Copy this command" theme={null}
typst init @preview/fireside:1.0.0
```
This downloads the template and creates a ready-to-use project folder with a `.typ` file inside.
**What just happened?** The `typst init` command pulled a professionally designed template from Typst Universe and set up a project folder for you. The template already has a polished layout — you just need to fill in your details.
If you see an error, try these fixes:
* **"typst: command not found"** — Go back to the [setup page](/tutorial/professional-pdf/setup) and install Typst CLI
* **Network error** — Check your internet connection; `typst init` downloads the template from the web
* **Permission error** — On Windows, try running PowerShell as Administrator. On macOS, try adding `sudo` before the command
Navigate into the template folder and start Gemini CLI:
```bash title="Copy this command" theme={null}
gemini
```
Press Enter. You should see Gemini CLI start up with a prompt ready for your input. If you have Wispr Flow running, you can speak your prompts directly — otherwise, type or paste them.
Now tell Gemini CLI what you want. Pick the style that appeals to you — say it out loud or copy and paste:
```text title="Say this or copy this prompt" theme={null}
I have a Typst cover letter template (fireside) in this folder.
Please customise it with:
- Placeholder name and contact details at the top
- Today's date in NZ format (e.g. 19 March 2026)
- A greeting, 3 short paragraphs of placeholder content, and a sign-off
- Clean, professional sans-serif font
Use NZ English spelling throughout. Keep the template's existing layout
but update the content and styling.
Then compile it to PDF using typst compile.
```
```text title="Say this or copy this prompt" theme={null}
I have a Typst cover letter template (fireside) in this folder.
Please customise it with:
- Placeholder name and contact details
- Today's date in NZ format (e.g. 19 March 2026)
- A greeting, 3 short paragraphs of placeholder content, and a sign-off
- Bold colour accents — suitable for creative industries
- Modern typography with contrasting font weights
Use NZ English spelling throughout. Make it eye-catching while keeping
the template's professional structure.
Then compile it to PDF using typst compile.
```
```text title="Say this or copy this prompt" theme={null}
I have a Typst cover letter template (fireside) in this folder.
Please customise it with:
- Placeholder name and contact details, right-aligned at the top
- Recipient's details left-aligned below
- Today's date in NZ format (e.g. 19 March 2026)
- "Dear Hiring Manager" greeting
- 3 formal paragraphs of placeholder content and "Yours sincerely" sign-off
- Traditional serif font and conservative styling
Use NZ English spelling throughout. This is for a corporate or government role.
Then compile it to PDF using typst compile.
```
**Don't worry about getting it perfect on the first try.** You'll refine the design in the next steps — that's the whole point of vibe coding!
Open the compiled PDF by double-clicking it in your file explorer. It will open in your default PDF viewer.
**Starting from a template means your first result already looks professional.** The template handles layout, typography, and spacing — Gemini CLI just customises the content and styling to your taste.
Not happy with the result? That's normal — and that's the whole point! Say or copy any of these follow-up prompts into Gemini CLI:
```text title="Say this or copy this prompt" theme={null}
Change the font to a modern sans-serif font. Keep everything else the same.
Then recompile to PDF.
```
```text title="Say this or copy this prompt" theme={null}
Add a subtle colour accent — use a dark teal or navy blue for headings
and a thin coloured line under my name. Keep the overall design professional.
Then recompile to PDF.
```
```text title="Say this or copy this prompt" theme={null}
The margins feel too wide. Reduce the margins to 2cm on all sides
and tighten the line spacing slightly so the letter feels more compact.
Then recompile to PDF.
```
```text title="Say this or copy this prompt" theme={null}
Add a small footer at the bottom of the page with "Page 1 of 1" centred
and my email address on the right side.
Then recompile to PDF.
```
**The vibe coding loop:** describe → compile → review → refine. Keep going until you love it! You can send as many prompts to Gemini CLI as you want — speak them or type them.
Ready to create a real cover letter? Say or copy this template prompt and fill in your details:
```text title="Say this or copy this prompt" theme={null}
Update my cover letter for a real application:
- My name: [Your Name]
- My email: [your.email@example.com]
- My phone: [your phone number]
- I'm applying for: [Job Title] at [Company Name]
- My key skills: [skill 1, skill 2, skill 3]
- Why I'm interested: [one sentence about why you want this role]
- My relevant experience: [brief description of relevant experience]
Write the cover letter content in a professional but warm tone.
Keep it to one page. Use NZ English spelling.
Then compile it to PDF.
```
**Save your prompts!** Keep a text file with your personal details so you can quickly generate cover letters for different jobs. Change the company name, role, and key skills each time.
## What Just Happened?
Here's what you did, step by step:
1. **You initialised** a professional template from Typst Universe with `typst init`
2. **You described** what you wanted — by speaking or typing — and Gemini CLI customised the template
3. **Typst compiled** the code into a pixel-perfect PDF
4. **You iterated** — asking for design changes, recompiling, and reviewing until it looked right
The key insight: you started from a professionally designed template instead of a blank page. The template gave you a solid foundation, and AI handled the customisation. You never had to learn Typst syntax — you described what you wanted, and Gemini CLI made it happen.
## Troubleshooting
The `.typ` file might be empty or have an error. Say or type this in Gemini CLI:
```text title="Say this or copy this prompt" theme={null}
The PDF is blank. Can you check the .typ file for errors and fix them?
Then recompile it to PDF.
```
If you see an error when compiling, paste the error message into Gemini CLI:
```text title="Say this or copy this prompt" theme={null}
I got this error when compiling: [paste the error message here]
Can you fix the Typst code and recompile?
```
Typst error messages are clear and specific — they tell you exactly which line has the problem.
Say or type this in Gemini CLI:
```text title="Say this or copy this prompt" theme={null}
The layout doesn't look right — [describe what's wrong, e.g. "the text
is too close to the edges" or "the spacing between paragraphs is too large"].
Can you fix it and recompile?
```
You can re-initialise the template:
```bash title="Copy this command" theme={null}
typst init @preview/fireside:1.0.0
```
Or tell Gemini CLI to start from scratch:
```text title="Say this or copy this prompt" theme={null}
I want to start fresh. Create a new cover letter from scratch as a .typ
file — don't use the template. [Then describe what you want]
```
Wispr Flow may occasionally mishear technical terms or proper nouns. You can review and correct the text in Gemini CLI before pressing Enter. If voice input is causing too many errors, switch to typing or pasting prompts instead.
Happy with your cover letter? Head to [Explore templates](/tutorial/professional-pdf/explore-templates) to discover more document types you can create — invoices, reports, checklists, and more.
# Explore Templates
Source: https://herwaka.shesharp.org.nz/tutorial/professional-pdf/explore-templates
Discover 7 professional document templates from Typst Universe — from invoices to reports — with ready-to-speak or copy prompts for Gemini CLI.
Now that you know the workflow — initialise a template, describe what you want, compile, review — let's explore what else you can create. Each template below comes from [Typst Universe](https://typst.app/universe), Typst's free community template library.
```mermaid theme={null}
flowchart LR
A["You speak\nor type"] -->|"Wispr Flow\n(optional)"| B["Gemini CLI\ncustomises it"]
B -->|"compile"| C["Typst creates\nyour PDF"]
C -->|"review"| D["Use or\nrefine it"]
```
Pick any template below. Run the `typst init` command to download it, then use the prompts to customise it — say them out loud with Wispr Flow or copy and paste.
***
**Use case:** Take your cover letter further with multi-page or styled variants.
You already customised the fireside template — here's how to level it up.
Download the fireside template by running this command:
```bash title="Copy this command" theme={null}
typst init @preview/fireside:1.0.0
```
Start Gemini CLI in the template folder, then say or copy this prompt:
```text title="Say this or copy this prompt" theme={null}
I have a fireside cover letter template in this folder.
Please customise it into a visually distinctive cover letter:
- Add a professional header with my name, email, phone, and LinkedIn URL
- Add a sidebar or accent column with a personal brand colour
- Today's date in NZ format (e.g. 19 March 2026)
- A well-structured body with clear paragraphs
- A professional sign-off
Use placeholder content. Use NZ English spelling.
Make it stand out from a standard letter.
Then compile it to PDF.
```
**Follow-up customisations:**
```text title="Say this or copy this prompt" theme={null}
Add a matching header and footer with a thin coloured line. Put my name
in the header and page number in the footer. Then recompile.
```
```text title="Say this or copy this prompt" theme={null}
Extend this into a two-page version with an additional section for
"Key Achievements" with 3-4 bullet points. Keep the same design style.
Then recompile.
```
**NZ job market tip:** Many NZ employers still appreciate a well-formatted cover letter. A visually distinctive design can help your application stand out — especially for roles in marketing, design, or communications.
**Use case:** Prepare for job interviews with a structured, printable checklist.
Download the aero-check template by running this command:
```bash title="Copy this command" theme={null}
typst init @preview/aero-check:0.3.0
```
Start Gemini CLI in the template folder, then say or copy this prompt:
```text title="Say this or copy this prompt" theme={null}
I have an aero-check checklist template in this folder.
Please customise it into an interview preparation checklist with three sections:
- "Before the Interview" (research company, prepare questions, plan outfit,
print CV, plan route — 5-6 items with checkboxes)
- "During the Interview" (body language tips, STAR method reminder,
questions to ask the interviewer — 5-6 items with checkboxes)
- "After the Interview" (send thank-you email, reflect on answers,
follow up timeline — 5-6 items with checkboxes)
Use a clean, professional layout with clear section headings.
Use NZ English spelling. Make it one page that's easy to print.
Then compile it to PDF.
```
**Follow-up customisations:**
```text title="Say this or copy this prompt" theme={null}
Add a "Notes" section at the bottom with lined space for handwritten notes.
Then recompile.
```
```text title="Say this or copy this prompt" theme={null}
Customise this checklist for a [job title] interview at [company name].
Add role-specific preparation items. Then recompile.
```
**Print it out!** This checklist is designed to be printed and used by hand. Review it the night before your interview and tick off each item as you prepare.
**Use case:** Bill clients professionally with NZ-compliant invoices.
Download the classy-german-invoice template by running this command:
```bash title="Copy this command" theme={null}
typst init @preview/classy-german-invoice:0.3.0
```
Start Gemini CLI in the template folder, then say or copy this prompt:
```text title="Say this or copy this prompt" theme={null}
I have a classy-german-invoice template in this folder.
Please customise it into a New Zealand freelance invoice:
- Change all text to English and use NZ English spelling
- My business name, address, and contact details at the top
- Invoice number, date (NZ format e.g. 19 March 2026), and due date
- Client's name and address
- A table of services with columns: Description, Hours, Rate, Amount
- 3 placeholder line items
- Subtotal, GST (15%), and Total in NZD
- Payment details section with NZ bank account format (XX-XXXX-XXXXXXX-XXX)
- Payment terms: "Due within 14 days"
Use placeholder content. Then compile it to PDF.
```
**Follow-up customisations:**
```text title="Say this or copy this prompt" theme={null}
Add my GST number (placeholder: 123-456-789) below my business name.
Add a note: "GST inclusive" next to the total. Then recompile.
```
```text title="Say this or copy this prompt" theme={null}
Add a small "Terms & Conditions" section at the bottom with standard
freelance payment terms. Then recompile.
```
**GST tip:** If you earn over \$60,000/year as a freelancer in NZ, you must register for GST. This invoice template includes 15% GST by default — adjust if you're not GST-registered.
**Use case:** Create a personal update, client newsletter, or team report.
Download the dashing-dept-news template by running this command:
```bash title="Copy this command" theme={null}
typst init @preview/dashing-dept-news:0.2.0
```
Start Gemini CLI in the template folder, then say or copy this prompt:
```text title="Say this or copy this prompt" theme={null}
I have a dashing-dept-news newsletter template in this folder.
Please customise it into a one-page professional newsletter:
- A bold header with the newsletter title and date (NZ format)
- A main article with a heading and 2-3 paragraphs
- A sidebar with "Quick Updates" — 3-4 short bullet points
- A "Coming Up" section with 2-3 upcoming dates/events
- A footer with contact information
Use placeholder content. Use NZ English spelling.
Make it visually engaging with colour accents and clear hierarchy.
Then compile it to PDF.
```
**Follow-up customisations:**
```text title="Say this or copy this prompt" theme={null}
Add a placeholder image area in the main article section. Use a grey
rectangle with the text "Photo" centred inside it. Then recompile.
```
```text title="Say this or copy this prompt" theme={null}
Update this newsletter with my personal brand. Use [your colour] as the
accent colour and add my name and tagline in the header. Then recompile.
```
**Stand out in your job search:** Send a monthly "personal newsletter" to your network summarising what you've been learning, projects you've worked on, and what roles you're looking for. It keeps you top of mind.
**Use case:** Showcase freelance services or create an event programme.
Download the caidan template by running this command:
```bash title="Copy this command" theme={null}
typst init @preview/caidan:0.1.0
```
Start Gemini CLI in the template folder, then say or copy this prompt:
```text title="Say this or copy this prompt" theme={null}
I have a caidan menu/catalogue template in this folder.
Please customise it into a freelance service catalogue:
- A professional header with a business name and tagline
- 4-5 service categories, each with:
- Service name and brief description (1-2 lines)
- Price or "From $X" pricing in NZD
- A "Get in Touch" section at the bottom with contact details
Use placeholder content for a freelance [web design / photography / consulting] business.
Use NZ English spelling and NZD currency.
Make it look polished — like a menu at a nice restaurant.
Then compile it to PDF.
```
**Follow-up customisations:**
```text title="Say this or copy this prompt" theme={null}
Add a "Packages" section with 3 bundled offerings (Basic, Standard, Premium)
presented in a comparison format with what's included in each. Then recompile.
```
```text title="Say this or copy this prompt" theme={null}
Convert this into an event programme for [event name]. Replace services
with a schedule of sessions, speakers, and times. Then recompile.
```
**Freelancers:** A polished service catalogue PDF attached to your emails looks far more professional than describing your services in plain text. It signals that you take your business seriously.
**Use case:** Create structured reports with a table of contents, figures, and references.
Download the graceful-genetics template by running this command:
```bash title="Copy this command" theme={null}
typst init @preview/graceful-genetics:0.2.0
```
Start Gemini CLI in the template folder, then say or copy this prompt:
```text title="Say this or copy this prompt" theme={null}
I have a graceful-genetics report template in this folder.
Please customise it into a professional business report:
- A title page with report title, author, date (NZ format), and organisation
- An auto-generated table of contents
- 3 chapters with headings and subheadings:
1. Introduction (background and objectives)
2. Findings (with a placeholder table and a placeholder figure)
3. Recommendations (numbered list of 4-5 recommendations)
- Page numbers in the footer
- A references section at the end with 3 placeholder references
Use placeholder content throughout. Use NZ English spelling.
Use a professional serif font and clean layout.
Then compile it to PDF.
```
**Follow-up customisations:**
```text title="Say this or copy this prompt" theme={null}
Add an executive summary after the title page and before the table of
contents. It should be a half-page overview of the key findings and
recommendations. Then recompile.
```
```text title="Say this or copy this prompt" theme={null}
Add a simple bar chart or graph in the Findings chapter using Typst's
built-in drawing capabilities. Use placeholder data. Then recompile.
```
**Useful for:** Project proposals, research summaries, business cases, or any situation where you need to present structured information professionally.
**Use case:** Create a multi-chapter thesis or dissertation.
Download the humble-dtu-thesis template by running this command:
```bash title="Copy this command" theme={null}
typst init @preview/humble-dtu-thesis:0.1.0
```
Start Gemini CLI in the template folder, then say or copy this prompt:
```text title="Say this or copy this prompt" theme={null}
I have a humble-dtu-thesis template in this folder.
Please customise it into a thesis template:
- A title page with thesis title, author name, degree, university, and date
- An abstract page
- An auto-generated table of contents
- 4 chapters:
1. Introduction
2. Literature Review
3. Methodology
4. Results and Discussion
- Each chapter should have 2-3 subsections with placeholder text
- A bibliography/references section with 5 placeholder references
- Page numbers, chapter headers in the running head
- Use academic formatting conventions (numbered headings, 12pt font, 1.5 line spacing)
Use placeholder content. Use NZ English spelling.
Then compile it to PDF.
```
**Follow-up customisations:**
```text title="Say this or copy this prompt" theme={null}
Add an appendix section after the references with 2 placeholder appendices
(Appendix A: Survey Questions, Appendix B: Raw Data Table). Then recompile.
```
```text title="Say this or copy this prompt" theme={null}
Add a "List of Figures" and "List of Tables" after the table of contents.
Add 2 placeholder figures and 1 placeholder table in the Results chapter.
Then recompile.
```
**This is a stretch goal** — academic formatting can be complex. If it doesn't look perfect on the first try, use follow-up prompts to refine the layout section by section.
***
## Design from Scratch
Once you're comfortable with templates, you can skip `typst init` entirely and ask Gemini CLI to create documents from a blank page:
```text title="Say this or copy this prompt" theme={null}
Create a [document type] as a Typst file called [filename].typ.
Don't use any template — design it from scratch with:
- [describe your layout and content requirements]
Use NZ English spelling. Then compile it to PDF.
```
This gives you complete creative freedom — but templates are usually a faster starting point.
## Find More Templates
The [Typst Universe](https://typst.app/universe) has hundreds of free templates. Browse it for inspiration, then use `typst init @preview/template-name:version` to get started.
**Mix and match!** You can combine elements from different templates. For example, say: "Take the header style from my cover letter and use it on my invoice" — Gemini CLI can handle this because all your `.typ` files are in the same folder.
Ready to wrap up? Head to [Keep going](/tutorial/professional-pdf/keep-going) for next steps, reflection questions, and resources.
# Keep Going
Source: https://herwaka.shesharp.org.nz/tutorial/professional-pdf/keep-going
Next steps, ideas to try, reflection questions, and resources for creating professional PDFs with AI — by speaking or typing.
Congratulations — you created professional PDFs just by describing what you wanted! Whether you spoke your prompts or typed them, the result is the same: polished, professional documents built by AI.
## What You Built
```mermaid theme={null}
flowchart LR
A["You described\nwhat you wanted"] -->|"voice or\ntyping"| B["Gemini CLI\ncustomised it"]
B --> C["Compiled\nto PDF"]
C --> D["Iterated and\nrefined"]
D --> E["Professional\nPDFs ready"]
```
Professional documents that:
* Were started from community templates and customised by AI
* Are pixel-perfect PDFs you can send, print, or share
* Can be updated anytime with a single prompt — spoken or typed
* Cost you absolutely nothing
## What You Learned
**The skill that matters most isn't coding — it's communication.** You learned to describe what you want clearly — by speaking or typing — review the result, and iterate until it's right. These are the same skills that work with any AI tool, in any field.
Here's what you practised:
* **Using the terminal** — running commands and navigating folders
* **Talking to AI** — describing what you want in natural language, by voice or text
* **Iterating** — refining your documents step by step
* **Compiling documents** — turning text files into polished PDFs
* **Adapting templates** — customising designs for different purposes
* **Voice input** — using Wispr Flow to speak your prompts hands-free (optional)
***
## Ideas to Try
Create a complete CV/resume as a PDF — tailored for each job you apply to.
Combine your best work into a multi-page portfolio PDF to share with employers.
Ask Gemini to create a script that generates personalised cover letters from a template.
Design a Typst template and share it on Typst Universe for others to use.
Here are ready-to-use prompts for each idea — say them or copy and paste:
```text title="Say this or copy this prompt" theme={null}
Create a professional CV/resume as a Typst file called cv.typ.
Include:
- My name and contact details (email, phone, LinkedIn) in a clean header
- A brief professional summary (2-3 sentences)
- Work Experience section with 2-3 roles (use placeholder content)
- Education section
- Skills section organised by category
- Keep it to 1-2 pages maximum
Use a modern, clean layout. Use NZ English spelling.
Then compile it to PDF.
```
```text title="Say this or copy this prompt" theme={null}
Create a portfolio booklet as a Typst file called portfolio.typ.
Include:
- A cover page with my name and "Portfolio" as the title
- A brief introduction page about me
- 4 project showcase pages, each with:
- Project title and date
- A brief description (2-3 sentences)
- A placeholder image area
- Key skills or tools used
- A contact page at the end
Use placeholder content. Use NZ English spelling.
Make it visually polished with consistent branding throughout.
Then compile it to PDF.
```
```text title="Say this or copy this prompt" theme={null}
I want to automate cover letter generation. Please:
1. Create a Typst template file called cover-template.typ with variables
for: name, email, phone, company, role, and key skills
2. Create a simple script that takes these variables and compiles the
template into a PDF
3. Show me how to run it to generate a cover letter for a specific job
Use NZ English spelling and NZ date format.
```
```text title="Say this or copy this prompt" theme={null}
Help me prepare my [cover letter / invoice / report] Typst template
for sharing on Typst Universe. Please:
1. Clean up the code and add comments explaining each section
2. Replace all personal information with clear placeholder variables
3. Create a README.md describing the template and how to use it
4. Show me how to submit it to typst.app/universe
```
***
## Reflect
Take a few minutes to think about your experience:
Many people are surprised by how quickly they can produce professional-looking documents — especially when they can just speak their requests. Was there a moment where the output exceeded your expectations? What about a moment where you had to refine your description?
If you used Wispr Flow, did speaking your prompts feel more natural than typing? Did you find yourself describing things differently when speaking versus writing? Voice input often helps people be more conversational and descriptive — which can lead to better results from AI.
Think about your job search or work. Could you create tailored cover letters for each application? Could you produce professional invoices for freelance work? What other documents could save you time?
Now that you know the workflow — describe, build, compile, iterate — what other documents could you create? A CV? A business proposal? A training manual? A personal brand kit?
***
## Resources
| Resource | Description | Link |
| ------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------- |
| Typst documentation | Official docs for the Typst language | [typst.app/docs](https://typst.app/docs) |
| Typst Universe | Community templates and packages | [typst.app/universe](https://typst.app/universe) |
| Gemini CLI docs | Official documentation for Gemini CLI | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| Wispr Flow | Voice input tool for any application | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
| Careers NZ | Career planning and job search resources | [careers.govt.nz](https://www.careers.govt.nz) |
Thank you for completing this tutorial! You've gone from zero to professional PDFs — and more importantly, you've learned how to communicate with AI to build real things. Whether you spoke your prompts or typed them, the skill is the same: describe what you want clearly, and let AI handle the rest. Take these skills with you into your next project.
# Create Professional PDFs with AI
Source: https://herwaka.shesharp.org.nz/tutorial/professional-pdf/overview
Just describe your document — by speaking or typing — and AI creates a professional PDF. No coding required.
**Difficulty: ★★★☆☆ Intermediate** · Estimated time: \~1.5 hours
Imagine creating a polished, professional cover letter — perfectly formatted, ready to send — just by describing what you want. Speak it out loud or type it in. No Word templates, no fighting with margins, no design skills needed.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## What You Will Build
Tell AI what document you need — speak it or type it in plain language
Gemini CLI writes Typst code that defines your document
Compile to a pixel-perfect PDF you can send or print
## How It Works
```mermaid theme={null}
flowchart LR
A["You speak\nor type"] -->|"Wispr Flow\n(optional)"| B["Gemini CLI\nunderstands"]
B -->|"customise"| C["Typst creates\nyour PDF"]
C -->|"review"| D{"Happy?"}
D -->|"Not quite"| B
D -->|"Yes!"| E["Send or\nprint it"]
```
You describe what you want — by speaking with Wispr Flow or typing directly. Gemini CLI understands your request and writes Typst code. Typst compiles it into a beautiful PDF. Review, refine, and repeat until it's perfect.
**You can either speak your prompts using Wispr Flow, or type/paste them into Gemini CLI. Both work exactly the same way.** Wispr Flow is optional — it just makes the experience hands-free. Every prompt in this tutorial works whether you speak it or type it.
## Why Typst?
| Feature | Word | LaTeX | Markdown | Typst |
| ------------------ | -------------------- | ------------------- | ------------- | ------------------------------ |
| AI-friendly | Poor — binary format | OK — verbose syntax | Good — simple | **Excellent** — clean, concise |
| Typography quality | Basic | Excellent | Basic | **Excellent** |
| Easy to learn | Yes | No | Yes | **Yes** |
| Fast compile | N/A | Slow | Fast | **Instant** |
| Token-efficient | N/A | Poor | Good | **Excellent** |
Typst is ideal for AI-generated documents because its syntax is clean and concise — AI models produce fewer errors and use fewer tokens compared to LaTeX. Compile times are instant, and error messages are clear and actionable.
Unlike Word, Typst files are plain text — so AI can read, write, and modify them directly. Unlike LaTeX, Typst is easy to learn and compiles in milliseconds.
## What You Will Learn
This tutorial focuses on **communication skills with AI**, not coding knowledge. You will learn how to:
* Describe a professional document clearly — by speaking or typing — so AI can build it
* Use Typst to compile documents into polished PDFs
* Iterate on design — adjust fonts, colours, layout, and content through conversation
* Adapt templates for different purposes (cover letters, invoices, reports)
* Work with the describe → build → compile → review loop
* Use voice input with Wispr Flow for a hands-free workflow
**No coding required.** Gemini CLI writes the Typst code — your job is to describe what you want. If you can explain what a document should look like, you can create professional PDFs.
## Tools
Google's free AI assistant that runs in your terminal. It understands your natural language requests and translates them into actions.
Optional voice input tool — speak instead of type. Works in any application, including your terminal.
A free, open-source typesetting system that turns simple text files into beautiful PDFs. Instant compilation and clear error messages.
A free tool needed to install Gemini CLI. One-time setup.
The command-line app built into your computer. On macOS it is called Terminal; on Windows it is called PowerShell or Command Prompt.
## Cost
| Tool | Cost |
| --------------------- | ---------------------------------------------------------------------------------- |
| Gemini CLI | Free (1,000 requests/day) |
| Node.js | Free |
| Typst CLI | Free and open source |
| Wispr Flow (optional) | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| **Total** | **\$0** |
## Prerequisites
Windows or macOS. No special hardware needed.
Take your time — there's no rush. You can pause and come back anytime.
No prior experience needed. Just a willingness to try something new.
Ready to get started? Head to [Set up your tools](/tutorial/professional-pdf/setup) to install everything you need.
# Set Up Your Tools
Source: https://herwaka.shesharp.org.nz/tutorial/professional-pdf/setup
Install Node.js, Gemini CLI, Wispr Flow, and Typst — everything you need before creating professional PDFs.
Before we start building, let's get your tools ready. This page walks you through each step.
**You will need:** a laptop with internet access. No coding experience is required — we will guide you through every step.
## Step-by-Step Setup
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
The terminal is a program where you type commands. It looks like a dark window with text — this is completely normal. Don't be intimidated!
1. Press the **Windows key** on your keyboard
2. Type **PowerShell**
3. Click **Windows PowerShell** in the search results
You'll see a dark blue window with a blinking cursor. That's your terminal!
1. Press **Cmd + Space** to open Spotlight
2. Type **Terminal**
3. Press **Enter**
You'll see a window with a blinking cursor. That's your terminal!
The terminal is where you'll type commands to install tools and talk to AI. You'll be using it a lot in this tutorial — keep it open!
Later in this tutorial, you'll need to open a terminal inside your project folder. Here's how:
**Windows:** Open the folder in File Explorer. Click the address bar at the top, type `powershell`, and press Enter. A terminal opens right in that folder.
**macOS:** Open Finder and navigate to the folder. Right-click the folder and select **"Open Terminal at Folder"**. If you don't see this option, you can open Terminal normally and type `cd ` (with a space), then drag the folder into the Terminal window and press Enter.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
Typst is a free, open-source typesetting system that turns simple text files into beautiful PDFs.
Open PowerShell and run:
```bash theme={null}
winget install --id Typst.Typst
```
Wait for the installation to finish. You may need to close and reopen your terminal afterwards.
Open Terminal and run:
```bash theme={null}
brew install typst
```
If you see `brew: command not found`, install Homebrew first by running:
```bash theme={null}
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
Follow the on-screen instructions, then run `brew install typst` again.
If the commands above don't work, you can download Typst directly:
1. Go to the [Typst releases page](https://github.com/typst/typst/releases/latest)
2. Download the file for your system:
* **Windows:** `typst-x86_64-pc-windows-msvc.zip`
* **macOS (Apple Silicon):** `typst-aarch64-apple-darwin.tar.xz`
* **macOS (Intel):** `typst-x86_64-apple-darwin.tar.xz`
3. Extract the downloaded file
4. Move the `typst` executable to a folder in your system PATH, or run it directly from the extracted folder
Open a new terminal window and type:
```bash theme={null}
typst --version
```
You should see a version number like `typst 0.13.x`. If you see an error, try closing and reopening your terminal first.
## Verify Your Setup
Before moving on, check that everything is ready:
Run `node --version` in your terminal. You should see a version number.
You can open a terminal window and type commands.
Run `gemini` in your terminal. It starts up and shows a prompt where you can type.
Gemini CLI is connected to your Google account.
Run `typst --version` in your terminal. You should see a version number.
If you installed it, you can dictate text in any application — including your terminal.
All set? Head to [Build your first PDF](/tutorial/professional-pdf/build-first-pdf) to create your first professional document.
# Create your first promo video
Source: https://herwaka.shesharp.org.nz/tutorial/promo-video/create-video
Use AI to build a promotional video with animated text, professional voiceover, and sound effects — describe what you want by speaking or typing.
Your tools are ready — preview running in one terminal, AI assistant in the other. Now let's create a real promotional video, step by step.
We will build a **30-second personal brand intro** — but the same workflow works for any type of video. You will generate voiceover audio, create a sound effect, build the video composition, and render the final MP4.
**Voice or typing — both work.** If you have Wispr Flow running, just start speaking your prompts. Otherwise, copy and paste them or type your own version. Your AI assistant understands natural language either way.
## The vibe coding loop
This is how you will work throughout this tutorial:
```mermaid theme={null}
flowchart LR
A["Describe what\nyou want"] --> B["AI builds it"]
B --> C["Preview in\nbrowser"]
C --> D{"Happy?"}
D -->|"Not yet"| A
D -->|"Yes!"| E["Render\nfinal MP4"]
```
Describe. Preview. Refine. Repeat until you love it — then render.
Before building the video, let's create the voiceover. You will tell your AI assistant to call the ElevenLabs API and generate an audio file from your script.
In your Gemini CLI terminal, say or type this prompt:
```text title="Say this or copy this prompt" theme={null}
I need you to generate a voiceover audio file using the ElevenLabs API.
My ElevenLabs API key is: [paste your API key here]
Please write a Node.js script that:
1. Sends this text to the ElevenLabs text-to-speech API:
"Hi, I'm [Your Name]. I'm a creative problem-solver transitioning
into tech, and I'm passionate about building tools that help people.
Let's connect."
2. Uses the voice ID "21m00Tcm4TlvDq8ikWAM" (Rachel voice)
3. Saves the audio output as public/voiceover.mp3
Then run the script.
```
In your Claude Code terminal, say or type this prompt:
```text title="Say this or copy this prompt" theme={null}
I need you to generate a voiceover audio file using the ElevenLabs API.
My ElevenLabs API key is: [paste your API key here]
Please write a Node.js script that:
1. Sends this text to the ElevenLabs text-to-speech API:
"Hi, I'm [Your Name]. I'm a creative problem-solver transitioning
into tech, and I'm passionate about building tools that help people.
Let's connect."
2. Uses the voice ID "21m00Tcm4TlvDq8ikWAM" (Rachel voice)
3. Saves the audio output as public/voiceover.mp3
Then run the script.
```
**Replace `[Your Name]`** with your actual name. Feel free to change the voiceover text to something that sounds like you — this is your personal brand intro.
```text title="Say this or copy this prompt" theme={null}
I need you to generate a voiceover audio file using the ElevenLabs API.
My ElevenLabs API key is: [paste your API key here]
Please write a Node.js script that:
1. Sends this text to the ElevenLabs text-to-speech API:
"Join us for SheSharp's next workshop on the future of AI in the
workplace. Saturday, April 12th, at GridAKL in Auckland.
Free entry — all skill levels welcome. Register now."
2. Uses the voice ID "21m00Tcm4TlvDq8ikWAM" (Rachel voice)
3. Saves the audio output as public/voiceover.mp3
Then run the script.
```
```text title="Say this or copy this prompt" theme={null}
I need you to generate a voiceover audio file using the ElevenLabs API.
My ElevenLabs API key is: [paste your API key here]
Please write a Node.js script that:
1. Sends this text to the ElevenLabs text-to-speech API:
"I built a personal portfolio website using AI — from scratch,
in under an hour. It includes my projects, skills, and contact
info. Here's how I did it."
2. Uses the voice ID "21m00Tcm4TlvDq8ikWAM" (Rachel voice)
3. Saves the audio output as public/voiceover.mp3
Then run the script.
```
Your AI assistant will write a small Node.js script, run it, and save the voiceover audio as `public/voiceover.mp3`.
**The AI asks for permission?** If your AI assistant asks to approve running a script or creating a file, type `y` and press **Enter**. This is normal — it is asking your permission before taking action.
Your AI assistant wrote a small Node.js script that:
1. Sent your voiceover text to ElevenLabs' text-to-speech API
2. Received audio data back from ElevenLabs' servers
3. Saved it as an MP3 file in your project's `public/` folder
The entire process happens in a few seconds. You described what you wanted in plain English, and AI handled all the technical details.
The free tier includes these built-in voices. Replace the voice ID in your prompt:
| Voice | ID | Style |
| ------ | ---------------------- | ---------------------------- |
| Rachel | `21m00Tcm4TlvDq8ikWAM` | Calm, professional (default) |
| Bella | `EXAVITQu4vr4xnSDxMaL` | Warm, friendly |
| Antoni | `ErXwobaYiN019PkySvjV` | Conversational, male |
| Elli | `MF3mGyEYCl7XYWbV9V6O` | Young, energetic |
| Josh | `TxGEqnHWrfWFTfGW9XjX` | Deep, authoritative |
| Adam | `pNInz6obpgDQGcFmaJgB` | Clear, neutral, male |
| Sam | `yoZ06aMxZJJ28mfd3POQ` | Warm, narrative |
| Domi | `AZnzlk1XvdvUeBnXmlld` | Confident, bold |
**Want more options?** Browse all voices at [elevenlabs.io/voice-library](https://elevenlabs.io/voice-library) to hear previews. The built-in voices above work on the free API tier.
Common causes:
* **Invalid API key:** Double-check that you copied the full key with no extra spaces.
* **Free tier limit reached:** Check your usage at [elevenlabs.io](https://elevenlabs.io) under Profile. The free tier is 10,000 characters per month.
* **Network error:** Make sure you have an internet connection. Try again in a few seconds.
If the error message is confusing, paste it into your AI assistant and ask: "What does this error mean and how do I fix it?"
Now let's create a sound effect to use in your video transitions.
```text title="Say this or copy this prompt" theme={null}
Now generate a sound effect using the ElevenLabs sound effects API.
Use my same ElevenLabs API key.
Create a short, subtle whoosh transition sound — about 1.5 seconds long.
Save it as public/swoosh.mp3
```
```text title="Say this or copy this prompt" theme={null}
Now generate a sound effect using the ElevenLabs sound effects API.
Use my same ElevenLabs API key.
Create a short, subtle whoosh transition sound — about 1.5 seconds long.
Save it as public/swoosh.mp3
```
**ElevenLabs can create any sound from a text description.** Try "gentle bell chime," "keyboard typing sounds," "crowd applause," or "ocean waves." Experiment with different descriptions — the more specific you are, the better the result.
| Video Type | Sound Effect Prompt |
| ------------------ | ---------------------------------------- |
| Personal brand | "subtle whoosh transition, professional" |
| Event invitation | "gentle bell chime notification" |
| Portfolio showcase | "soft keyboard typing sounds" |
| Social media tip | "upbeat pop notification sound" |
| Freelance pitch | "confident drum hit accent" |
| Thank-you video | "warm, soft chime" |
You can generate multiple sound effects and use different ones at different points in your video.
Now for the main event — describe your video and let AI build it. This is where everything comes together.
```text title="Say this or copy this prompt" theme={null}
Create a Remotion video composition for a 30-second personal brand intro.
The video should have:
- A dark gradient background (dark purple to dark blue)
- My name "[Your Name]" appearing with a smooth fade-in animation at 1 second
- Below it, my tagline "Transitioning into Tech" sliding in from the left at 2 seconds
- Three bullet points appearing one by one at 3, 4, and 5 seconds:
• Creative problem-solver
• Quick learner
• Passionate about helping people
- A "Let's connect" call-to-action fading in at 7 seconds
- Use the voiceover audio from public/voiceover.mp3 starting at 0.5 seconds
- Play the swoosh sound from public/swoosh.mp3 on each text transition
- Use TailwindCSS for all styling
- Make it 1080x1920 (vertical, for social media)
- The video should be 15 seconds long at 30fps
Create this as a new composition in the Remotion project and
register it in src/Root.tsx.
```
```text title="Say this or copy this prompt" theme={null}
Create a Remotion video composition for a 30-second personal brand intro.
The video should have:
- A dark gradient background (dark purple to dark blue)
- My name "[Your Name]" appearing with a smooth fade-in animation at 1 second
- Below it, my tagline "Transitioning into Tech" sliding in from the left at 2 seconds
- Three bullet points appearing one by one at 3, 4, and 5 seconds:
• Creative problem-solver
• Quick learner
• Passionate about helping people
- A "Let's connect" call-to-action fading in at 7 seconds
- Use the voiceover audio from public/voiceover.mp3 starting at 0.5 seconds
- Play the swoosh sound from public/swoosh.mp3 on each text transition
- Use TailwindCSS for all styling
- Make it 1080x1920 (vertical, for social media)
- The video should be 15 seconds long at 30fps
Create this as a new composition in the Remotion project and
register it in src/Root.tsx.
```
**Check the preview!** After the AI finishes creating files, switch to your browser at `http://localhost:3000`. You should see your video playing with the animations and audio. If the preview is not updating, try refreshing the browser.
**Replace `[Your Name]`** with your actual name. Feel free to change the tagline, bullet points, and colours to match your personal brand.
Your AI assistant created several files in the `src/` folder:
* A **React component** (`.tsx` file) that defines the video's visual layout — text, colours, animations
* Uses Remotion's `
Watch the preview in your browser. It probably will not be perfect on the first try — that is expected and part of the process. Here are some refinement prompts to try:
**Adjust sizing and layout:**
```text title="Say this or copy this prompt" theme={null}
The text is too small on mobile. Make the name 80px and the tagline 48px.
Also add a subtle glow effect behind the name text. Keep everything else the same.
```
**Change the colour scheme:**
```text title="Say this or copy this prompt" theme={null}
Change the background gradient from purple-blue to dark teal to navy blue.
Make the text white with a slight drop shadow for better readability.
```
**Fix audio timing:**
```text title="Say this or copy this prompt" theme={null}
The voiceover timing is off — the speech starts before the name appears.
Move the voiceover start to 1.5 seconds so it plays after the name fades in.
```
**Add visual flair:**
```text title="Say this or copy this prompt" theme={null}
Add a subtle animated particle effect in the background — small dots slowly
floating upward, very low opacity. Keep it elegant, not distracting.
```
**The vibe coding loop: Describe → Preview → Refine.** Each time you give a prompt, the AI updates the code and the preview refreshes. Keep refining until you love the result. There is no limit on how many times you can iterate.
**Be specific in your feedback.** Instead of "make it look better," try "make the name text larger, change the background to dark blue, and slow down the fade-in animation." The more specific you are, the better the AI can help.
Happy with the preview? Let's render the final MP4 file.
```text title="Say this or copy this prompt" theme={null}
Render this video composition to an MP4 file. Use the Remotion render
command and output it as out/my-promo-video.mp4
```
```text title="Say this or copy this prompt" theme={null}
Render this video composition to an MP4 file. Use the Remotion render
command and output it as out/my-promo-video.mp4
```
**Rendering takes 1 to 3 minutes** depending on your computer and the video length. You will see a progress bar in the terminal. The final MP4 file will be saved in the `out/` folder inside your project.
Open the rendered video and see the final result:
Open File Explorer and navigate to your project's `out/` folder, then double-click `my-promo-video.mp4`. Or run:
```bash title="Copy this command" theme={null}
start out/my-promo-video.mp4
```
```bash title="Copy this command" theme={null}
open out/my-promo-video.mp4
```
You should see your finished promotional video — with animated text, professional voiceover, and sound effects.
## What just happened?
Let's recap what you did:
1. **Generated a voiceover** — AI called the ElevenLabs API to turn your script into professional audio
2. **Created a sound effect** — AI generated a custom swoosh transition from a text description
3. **Built a video composition** — AI created animated text, backgrounds, and integrated your audio files
4. **Refined the design** — You described changes and AI updated the video in real time
5. **Rendered to MP4** — AI ran the render command and produced a video file you can share anywhere
The key insight: you described everything in plain English. You never opened video editing software, never wrote code, never touched a timeline. AI handled all the technical work — your job was to be the creative director.
## Troubleshooting
The AI may have created a file with a syntax error. Ask your AI assistant:
```text theme={null}
The preview is showing an error. Can you check the console output and fix any issues?
```
You can also try refreshing the browser. If the issue persists, check that Terminal 1 (the preview server) is still running.
Remotion's preview may not autoplay audio. Try clicking the play button in the Remotion preview controls. Also verify that the audio files exist:
```text theme={null}
Check if public/voiceover.mp3 and public/swoosh.mp3 exist and are valid audio files.
```
Common causes:
* **Invalid API key:** Double-check your key — no extra spaces or missing characters.
* **Free tier limit:** You may have used your monthly quota. Check usage at elevenlabs.io.
* **Rate limit:** Wait a few seconds and try again.
Paste the error message into your AI assistant and ask it to explain and fix the issue.
Ask your AI assistant:
```text theme={null}
The render command failed. Can you check what went wrong and try again?
```
Common causes: missing audio files, composition not registered in Root.tsx, or a code error. The AI will usually identify and fix the issue.
Tell your AI assistant the exact duration you want:
```text theme={null}
Change the video duration to exactly 20 seconds at 30fps. Adjust the animation
timing so everything fits within 20 seconds.
```
Wispr Flow may occasionally mishear technical terms. You can review and correct the text before pressing Enter. If voice input is causing too many errors, switch to copying and pasting the prompts instead.
Congratulations — you created a real promotional video using only natural language! Head to [Keep going](/tutorial/promo-video/keep-going) for more video ideas, advanced techniques, and ready-to-use prompts.
# Keep going
Source: https://herwaka.shesharp.org.nz/tutorial/promo-video/keep-going
More video ideas, ready-to-use prompts, advanced techniques, and resources for creating AI-powered promotional videos.
You have built a real promotional video — with animated text, AI voiceover, and sound effects — all by describing what you wanted in plain English. Let's look at what you achieved and where to go next.
## What you built
```mermaid theme={null}
flowchart LR
A["You described\nthe video"] --> B["AI generated\nvoiceover + SFX"]
B --> C["AI built the\nvideo composition"]
C --> D["You refined\nwith prompts"]
D --> E["Rendered\nfinal MP4"]
```
* Generated professional voiceover audio from a text script using ElevenLabs
* Created custom sound effects from text descriptions
* Built an animated video composition with Remotion — using only natural language prompts
* Iterated on the design through the describe-preview-refine loop
* Rendered a final MP4 file ready to share on LinkedIn, Instagram, or anywhere
* Learned to use an API key — a transferable skill used across the tech industry
**The skill you just learned is bigger than video creation.** You used an API key, called external services, and orchestrated multiple tools through natural language. This is the same pattern used in professional software development — you just did it without writing a single line of code.
## Try more video types
You built a personal brand intro. Now try these other scenarios — each prompt below is ready to use. Just paste it into your AI assistant.
```text title="Say this or copy this prompt" theme={null}
First, generate a voiceover using the ElevenLabs API with my API key [paste key]:
"Join us for SheSharp's next workshop on AI and the future of work.
Saturday, April 12th at GridAKL, Auckland. Free entry, all skill levels
welcome. Scan the QR code or visit shesharp.co to register."
Use the Rachel voice and save as public/voiceover.mp3
Then generate a gentle bell chime sound effect, about 1 second long,
and save it as public/chime.mp3
Then create a Remotion composition:
- Bright gradient background (coral to warm orange)
- "SheSharp Workshop" title fading in at 1 second
- Event details appearing line by line: date, time, venue
- Chime sound effect on each new line
- Voiceover starting at 0.5 seconds
- "Register Now" call-to-action at the end with a pulse animation
- 1080x1920 vertical format, 20 seconds at 30fps
```
```text title="Say this or copy this prompt" theme={null}
First, generate a voiceover using the ElevenLabs API with my API key [paste key]:
"I built a personal portfolio website using AI — from idea to live site in
under an hour. It showcases my projects, skills, and contact information.
No coding experience needed — I described what I wanted, and AI built it."
Use the Bella voice (voice ID EXAVITQu4vr4xnSDxMaL) and save as
public/voiceover.mp3
Then generate soft keyboard typing sounds, 2 seconds, save as public/typing.mp3
Then create a Remotion composition:
- Dark background with a subtle code-editor aesthetic
- Project title "My Portfolio Website" sliding in from the left
- Three feature cards appearing one by one: "Built with AI", "Deployed in minutes", "Fully responsive"
- Each card appears with the typing sound effect
- Voiceover playing throughout
- Website URL at the bottom fading in at the end
- 1080x1920 vertical, 20 seconds at 30fps
```
```text title="Say this or copy this prompt" theme={null}
First, generate a voiceover using the ElevenLabs API with my API key [paste key]:
"Here's a tip: you don't need to learn to code to work in tech. AI tools
can build websites, create videos, and automate your workflow — all from
natural language. The most important skill? Knowing how to describe what
you want clearly. Start experimenting today."
Use the Elli voice (voice ID MF3mGyEYCl7XYWbV9V6O) and save as
public/voiceover.mp3
Then generate an upbeat pop notification sound, 0.5 seconds, save as
public/pop.mp3
Then create a Remotion composition:
- Bold, high-contrast background (black with neon accents)
- Large "TECH TIP" title with a pop sound and bounce animation
- Key phrases from the voiceover appearing as bold text overlays, timed to the speech
- Pop sound on each new text appearance
- Fast, punchy transitions
- 1080x1920 vertical, 15 seconds at 30fps
```
```text title="Say this or copy this prompt" theme={null}
First, generate a voiceover using the ElevenLabs API with my API key [paste key]:
"Need a professional website or digital presence? I design and build modern
websites using the latest AI tools — fast, affordable, and tailored to your
brand. Let's talk about what you need."
Use the Josh voice (voice ID TxGEqnHWrfWFTfGW9XjX) and save as
public/voiceover.mp3
Then generate a confident, short drum hit accent sound, 1 second, save as
public/accent.mp3
Then create a Remotion composition:
- Clean, professional gradient (dark slate to charcoal)
- Service title "Web Design & AI Solutions" with elegant fade-in
- Three service offerings appearing with the accent sound: "Custom Websites", "AI Automation", "Digital Strategy"
- Contact email and website URL at the bottom
- Voiceover throughout
- 1080x1920 vertical, 20 seconds at 30fps
```
```text title="Say this or copy this prompt" theme={null}
First, generate a voiceover using the ElevenLabs API with my API key [paste key]:
"Hi [Interviewer Name], thank you so much for taking the time to meet with
me today. I really enjoyed learning about your team and the work you're
doing. I'm excited about the opportunity and look forward to hearing from
you. Thanks again!"
Use the Bella voice (voice ID EXAVITQu4vr4xnSDxMaL) and save as
public/voiceover.mp3
Then generate a warm, soft chime sound, 1 second, save as public/chime.mp3
Then create a Remotion composition:
- Warm, soft gradient background (light peach to soft lavender)
- "Thank You, [Interviewer Name]!" text with a gentle fade-in
- Your name and contact details appearing below
- Soft chime at the start and end
- Voiceover playing throughout
- Professional but personal feel
- 1920x1080 landscape (for email attachment), 15 seconds at 30fps
```
## Ideas to explore
Combine multiple short compositions into one longer video — your personal brand intro, a project showcase, and a skills summary. Ask AI to stitch them together with transitions.
ElevenLabs supports 32 languages. Try generating a voiceover in Mandarin, Spanish, or Maori. Same workflow — just change the voiceover text and tell the AI which language to use.
Use [Suno AI](https://suno.com) to generate custom background music from a text description (e.g., "upbeat corporate background music, 30 seconds"). Download the MP3 and add it to your Remotion composition alongside the voiceover.
Ask your AI assistant to refactor your video into a template with variables — name, tagline, colours, voiceover file. Then you can create new videos by just changing the variables, without redesigning from scratch.
## Advanced prompts to try
```text title="Say this or copy this prompt" theme={null}
Make the video responsive — create two versions of the composition: one vertical
(1080x1920 for social media) and one horizontal (1920x1080 for presentations).
Both should use the same voiceover and animations but with different layouts.
```
```text title="Say this or copy this prompt" theme={null}
Add animated captions that appear in sync with the voiceover. Each phrase should
fade in as it is spoken and fade out when the next phrase begins. Use white text
with a dark semi-transparent background bar.
```
```text title="Say this or copy this prompt" theme={null}
Create a 3-second animated intro logo for my name with a professional motion
graphics feel — think smooth scaling, rotation, and a light streak effect.
Add a subtle bass hit sound effect when the logo fully appears.
```
```text title="Say this or copy this prompt" theme={null}
Set up an environment variable for my ElevenLabs API key so I don't have to
paste it into every prompt. Store it as ELEVENLABS_API_KEY and update the
voiceover generation script to read from it.
```
## Level up: From Gemini CLI to Claude Code
If you used Gemini CLI for this tutorial, you have already learned the core workflow. Claude Code offers a more capable experience — especially for complex video compositions:
| | Gemini CLI | Claude Code |
| --------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| **What is the same** | Describe what you want in the terminal. AI reads project files, writes code, generates videos. | Same workflow, same prompts. |
| **What is different** | Free, great for getting started | More capable, handles complex compositions better, officially recommended by Remotion |
| **Cost** | Free (1,000 requests/day) | Requires Max or Pro subscription |
If you used Claude Code already — you are using the tool that professional developers use for this exact workflow.
## Try another tutorial
Create a portfolio website to host your new promo video — describe what you want and AI builds and deploys it.
Same vibe coding workflow, different output — create beautiful resumes, cover letters, and reports from prompts.
Ready for the next level? Build a full application using Claude Code — the same tool, more ambitious projects.
A lighter tutorial — connect AI to your Google Calendar and Gmail for a daily morning briefing.
## Reflect
Most people are surprised at how natural the workflow feels. Instead of learning timeline editors and keyframe animations, you describe what you want in plain English. The AI handles all the technical work — your job is to be the creative director.
A short personal brand video makes your LinkedIn profile stand out. A portfolio showcase turns your projects into something shareable. A thank-you video after an interview makes you memorable. In a competitive job market, these small differentiators add up.
Think about what you want to promote — yourself, an event, a project, a service. The same workflow works for all of them. You could even create videos for friends, community groups, or small businesses as a way to practice and build your portfolio.
Traditional video editing requires learning complex software (Premiere Pro, Final Cut, DaVinci Resolve), understanding timelines, keyframes, audio tracks, and export settings. The AI approach lets you focus on the creative vision while the technical execution is handled for you. Both approaches have their strengths — but for quick promotional content, the AI workflow is dramatically faster.
## Resources
| Resource | Description | Link |
| ------------------------ | -------------------------------------------- | ---------------------------------------------------------------------------------- |
| Remotion | Programmatic video framework | [remotion.dev](https://remotion.dev) |
| Remotion + AI Guide | Official guide for AI-powered video creation | [remotion.dev/docs/ai](https://www.remotion.dev/docs/ai) |
| ElevenLabs | AI voice and sound effects platform | [elevenlabs.io](https://elevenlabs.io) |
| ElevenLabs Voice Library | Browse 3,000+ voices | [elevenlabs.io/voice-library](https://elevenlabs.io/voice-library) |
| Gemini CLI | Google's free AI terminal assistant | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| Claude Code | Anthropic's AI coding assistant | [docs.anthropic.com](https://docs.anthropic.com/en/docs/claude-code) |
| Suno AI | AI music generation | [suno.com](https://suno.com) |
| Wispr Flow | Voice input for any application | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
Thank you for completing this tutorial! You went from zero to a professional promotional video — with voiceover and sound effects — all created through natural language. The ability to describe what you want and have AI build it is a powerful skill. Take it with you.
# Create AI Promo Videos with Voiceover
Source: https://herwaka.shesharp.org.nz/tutorial/promo-video/overview
Describe the video you want — by speaking or typing — and AI creates a short promotional video with professional voiceover and sound effects. No video editing skills required.
**Difficulty: ★★★★☆ Challenging** · Estimated time: \~1.5 to 2 hours
You need a 30-second video introducing yourself for LinkedIn. You could spend hours learning video editing software, watching tutorials about keyframes and timelines, and still end up with something that looks amateur. Or you could just describe what you want — "a dark gradient background, my name fading in, a professional voiceover, a swoosh sound on each transition" — and let AI build it for you.
**That's what we're building.** A workflow where you describe a video in plain English, and AI creates it — complete with animated text, professional voiceover, and sound effects. The result is a real MP4 file you can upload to LinkedIn, Instagram, or anywhere.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## What you will build
Tell AI what you want — text, colours, animations, voiceover script — using natural language
AI creates the video composition, generates professional voiceover audio and sound effects
Render the final video and share it on LinkedIn, Instagram, TikTok, or anywhere
## How it works
```mermaid theme={null}
flowchart LR
A["You describe\nthe video"] --> B["AI assistant\n(Gemini / Claude)"]
B --> C["Generates\nvoiceover + SFX"]
C --> D["Creates video\ncomposition"]
D --> E["Renders\nMP4 file"]
E --> F["Share it\nanywhere"]
```
You describe what you want your video to look like. Your AI assistant (Gemini CLI or Claude Code) calls the ElevenLabs API to generate a voiceover and sound effects, then creates a Remotion video composition with animated text and audio. You preview it, refine it, and render the final MP4.
## What you will learn
* Describe a video in natural language and have AI build it for you
* Get and use an API key — a transferable professional skill used across the tech industry
* Generate AI voiceover audio from any text, in any of 32 supported languages
* Create sound effects from text descriptions (swooshes, chimes, typing sounds)
* Work with the describe-preview-refine loop — the same workflow professionals use
* Render a finished MP4 video you can share anywhere
**No video editing skills required.** You will not open any video editing software. Your job is to describe what you want — the AI handles the rest. If you can describe a video to a friend, you can do this.
## What kind of videos can you make?
Here are real examples — pick one for the tutorial, or come up with your own.
A 30-second "Hi, I'm \[Name]" video for LinkedIn or your portfolio. Your name, tagline, key strengths, and a professional voiceover.
Promote a meetup, workshop, or community event. Animated date, venue, and call-to-action with a chime sound effect.
Walk through a completed project. Animated bullet points listing what you built, tools used, and the outcome — with narration.
A short, punchy reel sharing a tech tip or motivational message. Bold animated text with voiceover — perfect for Instagram or TikTok.
Promote a freelance offering. Service name, what you do, and contact info with a professional voiceover.
A personalised follow-up after a job interview or networking event. Warm voiceover, your name, and contact details.
## Tools
Your AI assistant that runs in the terminal. Gemini CLI is free (1,000 requests/day). Claude Code is a paid alternative recommended by Remotion — more capable, same workflow.
A framework that creates videos from code. You never write the code yourself — AI does it. Free for personal use.
AI voice and sound effects. Turn any text into professional voiceover or generate sound effects from descriptions. Free tier included.
Required to run Gemini CLI, Remotion, and the ElevenLabs scripts. A one-time setup step.
Speak your prompts instead of typing them. Works in any application, including your terminal.
## Cost
| Tool | Cost | Notes |
| --------------------- | ---------- | --------------------------------------------------------------------- |
| Gemini CLI | Free | 1,000 requests/day |
| Claude Code | Paid | Requires Max or Pro subscription. Optional alternative. |
| Node.js | Free | |
| Remotion | Free | Free for personal use |
| ElevenLabs | Free tier | 10,000 characters/month (\~5–8 min of speech) |
| Wispr Flow (optional) | Free trial | [Invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115) |
| **Total** | **\$0** | Using Gemini CLI + free tiers |
## Prerequisites
Windows or macOS. No special hardware needed — rendering happens on your machine.
Most of that is one-time setup. The actual video creation takes minutes. Take your time — there's no rush.
No coding or video editing experience needed. If you have completed any earlier tutorial in this series, you are well prepared.
Ready to get started? Head to [Set up your tools](/tutorial/promo-video/setup) to install everything you need.
# Set up your tools
Source: https://herwaka.shesharp.org.nz/tutorial/promo-video/setup
Install Node.js, your AI assistant, Remotion, and get your ElevenLabs API key — everything you need before creating AI-powered promo videos.
Before we start creating videos, let's get all your tools installed and connected. There are a few more tools than usual — but we will guide you through each one.
**You will need:** a laptop with internet access. No coding or video editing experience is required — we will guide you through every step.
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
The terminal is a program where you type commands. It looks like a dark window with text — this is completely normal. Don't be intimidated!
1. Press the **Windows key** on your keyboard
2. Type **PowerShell**
3. Click **Windows PowerShell** in the search results
You'll see a dark blue window with a blinking cursor. That's your terminal!
1. Press **Cmd + Space** to open Spotlight
2. Type **Terminal**
3. Press **Enter**
You'll see a window with a blinking cursor. That's your terminal!
The terminal is where you'll type commands to install tools and talk to AI. You'll be using it a lot in this tutorial — keep it open!
Later in this tutorial, you'll need to open a terminal inside your project folder. Here's how:
**Windows:** Open the folder in File Explorer. Click the address bar at the top, type `powershell`, and press Enter. A terminal opens right in that folder.
**macOS:** Open Finder and navigate to the folder. Right-click the folder and select **"Open Terminal at Folder"**. If you don't see this option, you can open Terminal normally and type `cd ` (with a space), then drag the folder into the Terminal window and press Enter.
**Already have Node.js?** If you installed it for a previous tutorial, skip this step. Run `node --version` in your terminal to check — you should see a version number like `v22.x.x`.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
You have two options. Gemini CLI is free and works well. Claude Code is a paid alternative that Remotion officially recommends — it is more capable but requires a subscription.
**Already have Gemini CLI?** If you installed it for a previous tutorial, skip this step. Just run `gemini` in your terminal to check it still works.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
Type `/quit` to exit Gemini CLI for now. We will start it again after setting up the video project.
Claude Code is Anthropic's AI coding assistant. It requires a **Max or Pro subscription** from [claude.ai](https://claude.ai). Remotion's official documentation recommends Claude Code for AI video creation.
Install it by running:
```bash title="Copy this command" theme={null}
npm install -g @anthropic-ai/claude-code
```
Then start it:
```bash title="Copy this command" theme={null}
claude
```
The first time you run it, Claude Code will ask you to sign in via your browser. Follow the instructions on screen.
Type `/exit` to exit Claude Code for now.
This means Node.js is not installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command: `sudo npm install -g @anthropic-ai/claude-code` and enter your password when prompted.
You need an ElevenLabs API key to generate voiceover audio and sound effects. This is free — you just need to create an account.
Go to [elevenlabs.io](https://elevenlabs.io) and click **Sign Up**. You can sign up with your Google account or email.
Once signed in:
1. Click your **profile icon** in the bottom-left corner
2. Click **Profile + API key**
3. Click **Show** next to your API key
4. Click the **copy icon** to copy it to your clipboard
Paste your API key into a text file, a note, or anywhere you can find it again. You will need it during the tutorial.
**Treat your API key like a password.** Do not share it publicly, post it on social media, or include it in files you upload to GitHub. Anyone with your key can use your ElevenLabs account.
An API key is like a password that lets one program talk to another. When your AI assistant generates voiceover audio, it sends your text to ElevenLabs' servers along with your API key. ElevenLabs checks the key to confirm it is you, then sends back the audio.
You will see API keys used in many professional tools — learning to use one here is a transferable skill.
The ElevenLabs free tier gives you **10,000 characters per month** — that is roughly 5 to 8 minutes of speech. For a 30-second promo video, you need about 75 to 100 words of voiceover. That means you can create **dozens of videos per month** on the free tier.
The free tier also includes sound effects generation and access to a set of built-in voices.
The free API tier includes several built-in voices (like Rachel, Bella, Antoni, and others). The full voice library with 3,000+ community voices is available on the ElevenLabs website for browsing, but accessing them via the API requires a paid plan.
**Workaround:** Browse voices at [elevenlabs.io/voice-library](https://elevenlabs.io/voice-library) to hear previews. For the API, use the built-in voices — they sound professional and work great for promo videos.
Now let's create a new Remotion project — this is the framework that turns your descriptions into real video files.
Run this command in your terminal:
```bash title="Copy this command" theme={null}
npx create-video@latest
```
When prompted, choose these settings:
* **Project name:** `my-promo-video` (or any name you like)
* **Template:** Select **Blank**
* **TailwindCSS:** Yes
* **Install Skills:** Yes
**What just happened?** You created a new video project on your computer. Remotion is a framework that creates videos from code — but you will never write code yourself. Your AI assistant reads and writes all the code for you. The "Skills" you installed are documentation files that help the AI understand how Remotion works.
Then go into the project folder and install dependencies:
```bash title="Copy this command" theme={null}
cd my-promo-video
```
```bash title="Copy this command" theme={null}
npm install
```
Make sure Node.js is installed correctly — run `node --version` to check. If that works but `npx` fails, try closing and reopening your terminal. On Windows, you may need to run the terminal as Administrator.
Choose a different name, or delete the existing folder first. You can use any name you like — just remember to use that name instead of `my-promo-video` in the rest of this tutorial.
Start the Remotion preview server so you can see your video as you build it:
```bash title="Copy this command" theme={null}
npm run dev
```
This opens a preview window in your browser (usually at `http://localhost:3000`). You should see an empty video canvas.
**Keep this terminal window running.** The preview server needs to stay active while you build your video. You will open a **second terminal window** in the next step for your AI assistant.
Open your browser manually and go to `http://localhost:3000`. If you see an error, make sure the terminal shows "Server running" or similar — it may take a moment to start.
Open a **new terminal window** (keep the preview server running in the first one). Navigate to your project folder and start your AI assistant:
```bash title="Copy this command" theme={null}
cd my-promo-video
```
```bash title="Copy this command" theme={null}
gemini
```
Gemini CLI is now running inside your video project. It can read all the project files and create video compositions when you describe what you want.
```bash title="Copy this command" theme={null}
cd my-promo-video
```
```bash title="Copy this command" theme={null}
claude
```
Claude Code is now running inside your video project. It can read all the project files — including the Remotion Skills documentation — and create video compositions when you describe what you want.
**Claude Code + Remotion Skills:** Because you installed Skills during project creation, Claude Code has built-in knowledge of how Remotion works. This is the workflow recommended in [Remotion's official documentation](https://www.remotion.dev/docs/ai/claude-code).
**Two terminals running at once:** This is normal and expected. Terminal 1 runs the preview server (so you can see your video). Terminal 2 runs your AI assistant (so you can describe what you want). They work together — the AI writes code, and the preview shows the result in real time.
## Verify your setup
Run `node --version` in your terminal. You should see a version number.
Run `gemini` or `claude` in your terminal. It starts up and shows a prompt where you can type.
You have your API key copied and saved somewhere safe — a text file, a note, or your password manager.
The folder `my-promo-video` exists on your computer with project files inside.
Terminal 1 is running `npm run dev` and you can see the Remotion preview at `http://localhost:3000`.
Terminal 2 has your AI assistant (Gemini CLI or Claude Code) running inside the `my-promo-video` folder.
All set? Head to [Create your first promo video](/tutorial/promo-video/create-video) to start building.
# Keep going
Source: https://herwaka.shesharp.org.nz/tutorial/slack-summary/keep-going
Next steps, ideas to try, and resources for summarising Slack channels with AI.
You built a real workflow for catching up on Slack channels using AI. Let's look at what you achieved and where to go next.
## What you built
```mermaid theme={null}
flowchart LR
A["You speak\nor type"] --> B["AI reads\nyour Slack"]
B --> C["Summarised\nin seconds"]
C --> D["Asked follow-up\nquestions"]
```
* Connected an AI assistant to a live service (Slack) — using real credentials
* Fetched real messages from a real Slack channel
* Produced structured summaries in multiple formats
* Used follow-up questions to find specific information
* Experienced voice-first AI interaction (Path B)
* All for free, in under 45 minutes
## What you learned
**The skill that matters most isn't coding — it's knowing how to connect tools and ask the right questions.** You learned to link an AI assistant to a real service, fetch live data, and turn it into something useful — whether by speaking or typing. That is a transferable skill you can use in any job.
* How AI tools connect to external services (connectors and MCP)
* How to write prompts that produce useful, structured output
* How to customise summary formats for different audiences
* How to ask follow-up questions to explore data without reading it yourself
* How to work with AI as a productivity tool — not just a chatbot
* How voice input can make AI workflows faster and more natural (Path B)
## Ideas to try
Fetch summaries from several channels and compare what is happening across your workspace.
Create a weekly summary and share it with your team. Format it as a newsletter you could paste into an email.
If you used Path B (Gemini CLI), you can add the `groups:history` and `groups:read` scopes to your Slack App to access private channels you are a member of. Go to your app settings at api.slack.com/apps to add these scopes.
Combine this tutorial with the [Create Professional PDFs](/tutorial/professional-pdf/overview) tutorial — summarise a channel, then use Gemini CLI + Typst to create a beautifully formatted PDF report.
```text title="Say this or copy this prompt — replace channel names" theme={null}
Summarise these three Slack channels from the last week:
- #general
- #announcements
- #project-updates
For each channel, give me 3-5 bullet points.
Then tell me: what are the common themes across all three channels?
```
```text title="Say this or copy this prompt — replace #channel-name" theme={null}
Create a weekly digest for #channel-name covering the last 7 days.
Format it as a short newsletter with:
- A one-sentence overview at the top
- Key updates (bullet points)
- Action items
- Links shared
Make it professional enough to paste into an email to my team.
```
```text title="Say this or copy this prompt — replace #channel-name" theme={null}
Read the recent messages in #channel-name and find any questions
that were asked but never answered.
List each unanswered question with:
- Who asked it
- When they asked it
- The full question
This will help me make sure nothing falls through the cracks.
```
## Level up: CLI skills and the path to Claude Code
If you used the CLI path, you now have hands-on experience with terminal-based AI, MCP connections, and voice-first workflows. These skills transfer directly to **Claude Code** — the professional CLI tool used in the Vibe Coding tutorial.
If you used Claude Desktop, you have seen how Anthropic builds AI tools. Claude Code is the terminal version of the same technology — faster, more powerful, and the tool of choice for professional developers. Consider trying the CLI path of this tutorial to build your terminal skills before moving to Vibe Coding.
**The same skills, a more powerful tool.** Speaking to an AI in the terminal, approving tool calls, working with MCP servers — you learned all of this with Gemini CLI. Claude Code uses the exact same workflow, but can also write code, edit files, and manage entire projects.
## Reflect
Many people are surprised how straightforward it is to connect AI to services they use every day. The technical barrier is much lower than most expect — especially with connectors (Path A) that require no setup at all, or voice commands (Path B) that make the experience feel like talking to a colleague.
Think about: catching up after time off, preparing for meetings by summarising relevant channels, creating weekly reports for your manager, or staying on top of community discussions in job-search groups. The ability to quickly extract information from conversations is valuable in any role. With voice input, you can get these summaries even while multitasking.
Speaking to AI feels different from typing. It is faster, more natural, and lowers the barrier to asking for help. Many people find they ask more follow-up questions when they can just speak — which means they get more value from the same tool. Think about where else in your workflow voice-first AI could save time.
The same approach works for emails, meeting transcripts, documents, news articles, and more. Once you know how to write effective prompts, you can apply this skill to any text-heavy task.
## Resources
| Resource | Description | Link |
| ---------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| Gemini CLI | Google's AI assistant for the terminal | [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli) |
| Claude Code | Professional AI CLI tool (your next step) | [docs.anthropic.com](https://docs.anthropic.com/en/docs/claude-code) |
| Claude Desktop | Download Anthropic's AI assistant | [claude.ai/download](https://claude.ai/download) |
| Wispr Flow | Voice input for any application | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
| Slack API docs | Official Slack API documentation | [api.slack.com](https://api.slack.com) |
| Slack MCP server | The MCP server used in Path B | [npmjs.com/package/@modelcontextprotocol/server-slack](https://www.npmjs.com/package/@modelcontextprotocol/server-slack) |
| Manage your Slack apps | Create and manage Slack Apps | [api.slack.com/apps](https://api.slack.com/apps) |
Thank you for completing this tutorial! You went from zero to summarising real Slack conversations with AI — whether by speaking or typing. The ability to connect tools, fetch data, and extract meaning from it is valuable in any role — take this skill with you.
# Summarise Slack Channels with AI
Source: https://herwaka.shesharp.org.nz/tutorial/slack-summary/overview
Catch up on any Slack channel in seconds — use AI to fetch and summarise messages, so you never miss what matters. No coding required.
**Difficulty: ★★★★☆ Challenging** · Estimated time: \~45 minutes
You open Slack after a long weekend. There are 150 unread messages across 5 channels — project updates you missed, decisions that were made without you, and a thread that somehow turned into 47 replies. You could spend 20 minutes scrolling through it all — or you could just say:
> "Read the recent messages in #general and give me a summary with the main topics, decisions, and action items"
And within seconds, you have a clear, structured catch-up. No scrolling, no skimming, no fear of missing something important.
**That's what we're building.** A workflow that reads your Slack messages and gives you a clear, useful summary — instantly.
**Tutorial led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## What you will build
Link an AI tool to your Slack workspace so it can read messages
Pull messages from any channel you choose
AI reads the messages and gives you a clear, actionable summary
## Two paths to choose from
This tutorial offers two ways to achieve the same result. Pick the one that suits you best.
**\~30 minutes** · Recommended
Install Gemini CLI, create a Slack App, and use voice commands through Wispr Flow to summarise channels from your terminal. You will learn how AI tools connect to services via MCP — the same workflow used by professional tools like Claude Code.
**\~10 minutes** · Quick setup
Download Claude Desktop, connect your Slack workspace with one click, and start asking for summaries. Quick results, but you will not build the CLI skills used in other tutorials. Claude Desktop is made by Anthropic — the same company behind Claude Code.
**Which path should I choose?** We recommend **CLI + Voice** — it builds the terminal skills you will use in every tutorial, and prepares you for professional tools like Claude Code. Choose Claude Desktop only if you are short on time and want quick results without terminal setup.
## How it works
**Recommended: Gemini CLI + Voice**
```mermaid theme={null}
flowchart LR
A["You speak"] --> B["Wispr Flow\nconverts to text"]
B --> C["Gemini CLI\nreads Slack"]
C --> D["You get\na summary"]
```
**Alternative: Claude Desktop**
```mermaid theme={null}
flowchart LR
A["You connect\nSlack to Claude"] -->|"one click"| B["Claude reads\nyour messages"]
B -->|"summarises"| C["You get\na summary"]
```
Both paths connect an AI assistant to your Slack workspace. The AI reads the messages from your chosen channel, analyses the conversation, and produces a structured summary — all in seconds.
**You can either speak your prompts using Wispr Flow, or type/paste them into Gemini CLI. Both work exactly the same way.** Wispr Flow is optional — it just makes the experience hands-free. Every prompt in this tutorial works whether you speak it or type it.
## What you will learn
* Connect an AI tool to a real service (Slack) to access live data
* Write clear prompts that produce useful, structured summaries
* Customise summary formats for different needs (catch-up, meeting notes, highlights)
* Ask follow-up questions about conversations you haven't read
* Work with AI as a productivity tool for everyday tasks
* Use voice input to interact with AI hands-free (Path B)
**No coding required.** The AI handles everything — your job is to describe what kind of summary you want. If you can explain what you need to a colleague, you can do this.
## Tools
Google's free AI assistant that runs in your terminal. Supports MCP connections to external services. Used in the recommended path.
Optional voice input tool — speak instead of type. Works in any application, including your terminal. Used in the recommended path.
Anthropic's free AI assistant app. Connect it to Slack and chat directly. Used in the alternative path only.
Lets your tools read messages from Slack channels. You will create a simple Slack App with read-only access.
Required to install Gemini CLI and the Slack MCP server. Only needed for Path B.
## Cost
| Tool | Cost |
| -------------- | ---------------------------------------------------------------------------------- |
| Claude Desktop | Free |
| Gemini CLI | Free (1,000 requests/day) |
| Wispr Flow | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| Node.js | Free |
| Slack API | Free |
| **Total** | **\$0** |
## Prerequisites
Windows or macOS. No special hardware needed.
Take your time — there's no rush. You can pause and come back anytime.
Any workspace where you are a member. This could be a work, community, or personal workspace.
Ready to get started? Head to [Set up your tools](/tutorial/slack-summary/setup) to get everything ready.
# Set up your tools
Source: https://herwaka.shesharp.org.nz/tutorial/slack-summary/setup
Connect AI to your Slack workspace — install Gemini CLI with voice commands (recommended) or try the quick Claude Desktop alternative.
Before we start summarising, let's get your tools connected to Slack. Choose the path that suits you best.
**You will need:** a laptop with internet access and a Slack workspace where you are a member. No coding experience is required — we will guide you through every step.
## Choose your path
This path gives you a voice-first experience with more control. You will install Gemini CLI, create a Slack App, configure a Model Context Protocol (MCP) server, and optionally set up Wispr Flow for hands-free voice commands. This takes about 30 minutes.
**Already have Node.js?** If you installed it for a previous tutorial, skip this step. Run `node --version` in your terminal to check — you should see a version number like `v22.x.x`.
Node.js is a free tool that lets you run Gemini CLI on your computer.
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.msi` file
4. Click **Next** through all the screens — the default settings are fine
5. Click **Install**, then **Finish**
1. Go to [nodejs.org](https://nodejs.org)
2. Click the big green **LTS** button to download the installer
3. Open the downloaded `.pkg` file
4. Click **Continue** through all the screens — the default settings are fine
5. Click **Install**, then **Close**
Open your terminal and type:
```bash theme={null}
node --version
```
You should see a version number like `v22.x.x`. If you see an error, try closing and reopening your terminal, then run the command again.
**Already have Gemini CLI?** If you installed it for a previous tutorial, skip this step. Just run `gemini` in your terminal to check it still works.
Gemini CLI is Google's free AI assistant. It runs in your terminal and helps you with tasks based on your descriptions.
Open your terminal and type:
```bash theme={null}
npm install -g @google/gemini-cli
```
Wait for the installation to finish. Then start it by typing:
```bash theme={null}
gemini
```
The first time you run it, Gemini CLI will ask you to sign in:
* Choose **"Sign in with Google"**
* A browser window will open — sign in with your Google account
* Come back to the terminal when it says you're connected
**Free tier:** 60 requests per minute, 1,000 requests per day — more than enough for this tutorial and everyday use.
This means Node.js isn't installed correctly. Go back and reinstall Node.js. After reinstalling, **close your terminal completely and open a new one** before trying again.
**Windows:** Close PowerShell and reopen it by right-clicking and choosing **"Run as Administrator"**. Then try the install command again.
**macOS:** Add `sudo` before the command:
```bash theme={null}
sudo npm install -g @google/gemini-cli
```
Enter your computer password when prompted (you won't see characters as you type — that's normal).
Type `/quit` to exit Gemini CLI for now. We will start it again after configuring the Slack connection.
A Slack App is how you give Gemini CLI permission to read messages from your workspace. The app you are creating will only have read-only access — it cannot post, delete, or change anything.
1. Go to [api.slack.com/apps](https://api.slack.com/apps) and sign in
2. Click **Create New App**
3. Choose **From scratch**
4. Enter a name — for example, `Channel Summariser`
5. Select your Slack workspace from the dropdown
6. Click **Create App**
A Slack App is like giving a programme a key to your workspace. The key only opens the doors you choose — in this case, the ability to read messages in public channels. The app cannot see your direct messages, cannot post anything, and cannot change any settings.
Now you need to tell Slack exactly what the app is allowed to do.
1. In the left sidebar, click **OAuth & Permissions**
2. Scroll down to the **Scopes** section
3. Under **Bot Token Scopes**, click **Add an OAuth Scope**
4. Add these two scopes:
* `channels:history` — lets the app read messages in public channels
* `channels:read` — lets the app see which public channels exist
**Only add these two scopes.** They give the app read-only access to public channels. The app cannot read private channels, direct messages, or post anything.
Scopes are permissions. They control exactly what your app is allowed to do. Think of them like keys — `channels:history` is the key that opens message history, and `channels:read` is the key that lets the app see channel names. Without these specific keys, the app cannot do anything.
1. Scroll to the top of the **OAuth & Permissions** page
2. Click **Install to \[Your Workspace Name]**
3. Review the permissions and click **Allow**
4. You will see a **Bot User OAuth Token** that starts with `xoxb-`
5. **Copy this token and save it somewhere safe** — you will need it in Step 7
**This token is like a password.** Anyone who has it can read messages in your workspace. Do not share it publicly or post it online. Save it in a text file or password manager.
You should see a long token starting with `xoxb-` on the OAuth & Permissions page. If you see an error, check that you added both scopes in Step 4, then try clicking **Install to Workspace** again.
The Team ID identifies your Slack workspace. You need it for the MCP configuration.
1. Open Slack in your **web browser** (not the desktop app) at [app.slack.com](https://app.slack.com)
2. Sign in to your workspace
3. Look at the URL in your browser — it will look like: `https://app.slack.com/client/T01234567/...`
4. The Team ID is the part that starts with **T** — for example, `T01234567`
5. **Copy this ID and save it** alongside your bot token
Another way: In Slack, click your **workspace name** in the top-left corner → **Settings & administration** → **Workspace settings**. The Workspace ID (which is the same as Team ID) is usually shown on the settings page, or in the URL of the settings page.
Now you will connect Gemini CLI to Slack by configuring a Model Context Protocol (MCP) server. This tells Gemini CLI how to talk to Slack.
1. Open File Explorer
2. In the address bar, type `%USERPROFILE%\.gemini` and press **Enter**
3. If you see a file called `settings.json`, open it with Notepad
4. If the file does not exist, create a new text file and name it `settings.json`
1. Open Finder
2. Press **Cmd + Shift + G** and type `~/.gemini` then press **Enter**
3. If you see a file called `settings.json`, open it with TextEdit
4. If the file does not exist, open Terminal and run:
```bash theme={null}
touch ~/.gemini/settings.json && open -e ~/.gemini/settings.json
```
Paste the following into `settings.json`. **Replace the two placeholders** with your actual bot token and Team ID:
```json title="~/.gemini/settings.json — replace YOUR_BOT_TOKEN and YOUR_TEAM_ID" theme={null}
{
"mcpServers": {
"slack": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-YOUR_BOT_TOKEN",
"SLACK_TEAM_ID": "YOUR_TEAM_ID"
}
}
}
}
```
**Replace two things:** `xoxb-YOUR_BOT_TOKEN` with your full bot token (e.g., `xoxb-1234-5678-abcdef`) and `YOUR_TEAM_ID` with your Team ID (e.g., `T01234567`). Keep the quotation marks.
If `settings.json` already has content from a previous tutorial, you need to merge the configurations. Add the `"slack"` section inside the existing `"mcpServers"` block rather than replacing the entire file.
Save the file.
MCP stands for Model Context Protocol. It is a standard way for AI tools to connect to external services like Slack, GitHub, or databases. Think of it as a universal adapter — instead of each AI tool building its own Slack connection, they all use MCP. You configure it once, and the AI can read your Slack messages.
The bot needs to be a member of a channel before it can read messages from it.
1. Open Slack (desktop app or browser)
2. Go to the channel you want to summarise
3. Type `/invite @Channel Summariser` (or whatever you named your app) and press **Enter**
4. You should see a message confirming the bot has been added
**Choose an active channel** with at least 10–20 recent messages. This gives the AI something meaningful to summarise. You can always add the bot to more channels later.
Make sure you spell the app name exactly as you created it. You can also add the bot by clicking the **channel name** at the top → **Integrations** → **Add an App**, then find your app in the list.
Wispr Flow lets you speak your prompts instead of typing them. It works in any application — including your terminal where Gemini CLI runs.
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
Open your terminal and start Gemini CLI:
```bash theme={null}
gemini
```
The first time Gemini CLI loads with MCP configured, it may take a moment to connect to the Slack server. Once it's ready, say (with Wispr Flow) or type this test prompt:
```text title="Say this or copy this prompt" theme={null}
Use the Slack tools to check how many messages are in the channel #general.
```
You should see Gemini CLI access your Slack workspace and report the message count. If it works, everything is connected.
Check your `settings.json` file for typos. The most common issues are:
* Missing commas between fields
* Incorrect quotation marks (use straight quotes `"`, not curly quotes)
* Wrong file location — it must be in `~/.gemini/settings.json`
After fixing, close Gemini CLI (`/quit`) and start it again.
Make sure Node.js is installed correctly (`node --version` should show a version number). The MCP server uses `npx` to run, which comes with Node.js. If `npx` is not found, reinstall Node.js.
Your bot token is incorrect. Go back to [api.slack.com/apps](https://api.slack.com/apps), find your app, go to **OAuth & Permissions**, and copy the **Bot User OAuth Token** again. Update your `settings.json` with the correct token.
## Verify your setup
Run `node --version` in your terminal. You should see a version number.
Run `gemini` in your terminal. It starts up and shows a prompt where you can type.
Your app has `channels:history` and `channels:read` scopes.
You have a token starting with `xoxb-` saved somewhere safe.
You have an ID starting with `T` saved alongside your token.
Your `settings.json` file contains the Slack MCP server configuration.
The bot is a member of at least one channel you want to summarise.
Wispr Flow is running and you can see the microphone indicator. If you skipped this step, that is perfectly fine — you can type all prompts instead.
Gemini CLI can access your Slack workspace when you ask.
All set? Head to [Summarise your Slack channels](/tutorial/slack-summary/summarize) to get your first AI-powered summary.
**Quick alternative.** This path gets you results in 10 minutes, but skips the CLI skills used in other tutorials. Claude Desktop is made by Anthropic — the same company behind Claude Code, which you will use in the advanced Vibe Coding tutorial. For the full learning experience, we recommend the **Recommended: CLI + Voice** tab.
This is the fastest way to get started. You will download Claude Desktop, connect it to Slack, and be ready to summarise in about 10 minutes.
1. Go to [claude.ai/download](https://claude.ai/download)
2. Download the app for your operating system (Windows or macOS)
3. Install it by opening the downloaded file and following the prompts
4. Open Claude Desktop and create a free account (or sign in if you already have one)
No. The free plan includes access to Slack connectors. You can start summarising channels right away without paying anything.
1. In Claude Desktop, click your **profile icon** in the bottom-left corner
2. Click **Customize**
3. Click **Connectors**
4. Click the **+** button to add a new connector
5. Find **Slack** in the list and click it
6. A browser window will open — sign in to your Slack workspace
7. Review the permissions and click **Allow**
8. Return to Claude Desktop — Slack is now connected
**What does the connector do?** It gives Claude secure, read-only access to your Slack messages. Claude can search and read messages in channels you have access to, but it cannot post, delete, or modify anything.
Make sure you are using the latest version of Claude Desktop. Go to **Help** → **Check for Updates** and install any available updates. If you still don't see it, try signing out and signing back in.
Check that your browser is not blocking pop-ups. Try a different browser if the window still won't appear. You can also try copying the authorisation URL and pasting it directly into your browser.
In the Claude Desktop chat, type this prompt:
```text title="Copy this prompt" theme={null}
List the Slack channels you can see in my workspace.
```
You should see a list of channel names from your Slack workspace. If you do, the connection is working.
Go back to **Customize** → **Connectors** and check that Slack shows as connected. If it shows an error, remove the connector and add it again. Make sure you authorise the correct workspace.
## Verify your setup
The app opens and you can type messages.
The Slack connector shows as active in **Customize** → **Connectors**.
Claude can list your Slack channels when you ask.
All set? Head to [Summarise your Slack channels](/tutorial/slack-summary/summarize) to get your first AI-powered summary.
# Summarise your Slack channels
Source: https://herwaka.shesharp.org.nz/tutorial/slack-summary/summarize
Ask AI to read your Slack messages and create a clear, useful summary — by speaking or typing. Try different summary styles and ask follow-up questions.
Your AI tool is connected to Slack. Now let's put it to work — ask it to read a channel and give you a summary you can actually use.
## Get your first summary
Open your terminal and start Gemini CLI:
```bash theme={null}
gemini
```
Now say (with Wispr Flow) or paste this prompt. Replace `#channel-name` with the name of a real channel in your workspace.
```text title="Say this or copy this prompt — replace #channel-name" theme={null}
Read the recent messages in the Slack channel #channel-name and give me a summary. Include the main topics discussed, any decisions that were made, action items, and unanswered questions. Keep it to 10 bullet points.
```
Gemini CLI will use the Slack MCP tools to fetch the messages and return a structured summary.
**Gemini asks for permission?** If Gemini CLI asks to approve a tool call, type `y` and press **Enter**. This is normal — it is asking your permission before accessing Slack.
Open Claude Desktop and paste this prompt. Replace `#channel-name` with the name of a real channel in your workspace.
```text title="Copy this prompt — replace #channel-name" theme={null}
Please read the recent messages in the Slack channel #channel-name and give me a summary.
Include:
- The main topics discussed
- Any decisions that were made
- Any action items or things people need to do
- Any questions that were asked but not answered
Keep the summary concise — no more than 10 bullet points.
```
Within a few seconds, Claude will read the channel and return a structured summary.
**First time?** If Claude asks which workspace or channel you mean, just clarify. For example: "The #general channel in my SheSharp workspace."
You should see a summary that looks something like this:
> **Summary of #general (last 7 days):**
>
> * The team discussed the upcoming workshop schedule for April
> * Sarah shared a link to the new resource guide
> * A decision was made to move the Friday meeting to Thursday
> * Action item: Everyone needs to submit their feedback by Wednesday
> * Open question: Who is leading the networking session?
That's it — you just caught up on an entire channel in seconds.
## Try different summary styles
The first summary is a great start. But depending on your situation, you might want a different format. Try these prompts.
**Quick catch-up:**
```text title="Say this or copy this prompt — replace #channel-name" theme={null}
Summarise #channel-name like a colleague filling me in over coffee. Keep it to 5 sentences.
```
**Meeting notes:**
```text title="Say this or copy this prompt — replace #channel-name" theme={null}
Summarise #channel-name as formal meeting notes I could share with my manager. Include dates, decisions, and action items.
```
**Key highlights only:**
```text title="Say this or copy this prompt — replace #channel-name" theme={null}
Read #channel-name and extract only the important stuff — announcements, deadlines, decisions. Ignore small talk.
```
**Quick catch-up:**
```text title="Copy this prompt — replace #channel-name" theme={null}
Summarise the recent messages in #channel-name as a quick catch-up
for someone who missed the last few days.
Write it in a casual, friendly tone — like a colleague filling you in
over coffee. Keep it to 5 sentences maximum.
```
**Meeting notes:**
```text title="Copy this prompt — replace #channel-name" theme={null}
Summarise the recent messages in #channel-name as formal meeting notes.
Include:
- Date range of messages
- Key discussion points
- Decisions made
- Action items with who is responsible (if mentioned)
Format it as a professional document I could share with my manager.
```
**Key highlights only:**
```text title="Copy this prompt — replace #channel-name" theme={null}
Read the recent messages in #channel-name and extract only the most
important items — announcements, deadlines, decisions, or urgent requests.
Ignore small talk and casual messages.
List each highlight as a single bullet point.
```
**The key skill here is prompt writing.** Notice how each prompt tells the AI exactly what format you want, what to include, and what to leave out. The more specific your instructions, the more useful the summary.
## Go further
Once you are comfortable with basic summaries, try these creative prompts. They work with both paths — the voice-friendly versions below are shown for Path B, but you can paste them into Claude Desktop too.
```text title="Say this or copy this prompt — replace channel names" theme={null}
Compare what's been happening in #general, #announcements, and #project-updates this week.
```
```text title="Say this or copy this prompt — replace #channel-name" theme={null}
Find any unanswered questions in #channel-name.
```
```text title="Say this or copy this prompt — replace #channel-name" theme={null}
Who has been most active in #channel-name this week?
```
```text title="Say this or copy this prompt — replace #channel-name" theme={null}
Were any links shared in #channel-name? List them all.
```
**This is the magic of natural language.** You do not need to memorise commands — just describe what you want. If the AI is not sure what you mean, it will ask you to clarify.
## Ask follow-up questions
The AI remembers the messages it just read. You can ask follow-up questions without fetching the messages again.
```text title="Say this or copy this prompt" theme={null}
Were there any messages about [topic]?
```
```text title="Say this or copy this prompt" theme={null}
Were there any links shared? List them all.
```
```text title="Say this or copy this prompt" theme={null}
Who was the most active person in the conversation?
```
```text title="Say this or copy this prompt" theme={null}
Summarise only messages from the last 24 hours.
```
```text title="Say this or copy this prompt" theme={null}
What was the overall mood or tone of the conversation?
```
```text title="Search for a topic" theme={null}
Were there any messages about [topic]?
```
```text title="Find shared links" theme={null}
Were there any links shared? List them all with a brief description of each.
```
```text title="Check who's active" theme={null}
Who was the most active person in the conversation?
```
```text title="Filter by time" theme={null}
Summarise only messages from the last 24 hours.
```
```text title="Analyse sentiment" theme={null}
What was the overall mood or tone of the conversation?
```
**This is where AI really shines.** Instead of scrolling through hundreds of messages looking for one piece of information, you can just ask. "Did anyone mention the budget?" is much faster than reading every message yourself.
## Save your summary
Want to keep a copy of your summary? Here's how.
Say or type:
```text title="Say this or copy this prompt" theme={null}
Save that summary to a file called summary.txt in the current folder.
```
The summary is now saved as a text file on your computer.
* **Copy and paste:** Select the summary text and paste it into a document, email, or notes app
* **Download:** Click the **copy** icon at the top of Claude's response to copy the entire message
## What just happened?
Let's recap what you did:
1. **Connected** an AI tool to your Slack workspace
2. **Fetched** messages from a channel — the AI handled this automatically
3. **Summarised** the conversation in a structured, useful format
4. **Customised** the summary style to match your needs
5. **Asked follow-up questions** to find specific information
The key insight: AI is excellent at reading large amounts of text and extracting what matters. A task that would take you 20 minutes of scrolling took the AI about 10 seconds.
## Troubleshooting
Go to **Customize** → **Connectors** and check that Slack shows as connected. If it shows an error, remove the connector and add it again. Make sure you authorise the correct workspace.
Check your `~/.gemini/settings.json` file for typos. Common issues: missing commas, curly quotes instead of straight quotes, or wrong bot token. After fixing, exit Gemini CLI (`/quit`) and restart it.
Wispr Flow may occasionally mishear technical terms or channel names. You can review and correct the text in Gemini CLI before pressing Enter. If voice input is causing too many errors, switch to typing or pasting prompts instead.
The channel might not have enough messages. Try a busier channel with more activity. You can also be more specific in your prompt — for example, "Summarise only messages from the last 3 days" or "Focus on messages about the upcoming event."
Add filtering instructions to your prompt. For example: "Ignore messages from bots", "Only include messages related to \[project name]", or "Skip casual greetings and small talk."
By default, the AI may only fetch the most recent messages. Ask it to go further back: "Summarise all messages from #channel-name in the last 7 days" or "Read the last 100 messages from #channel-name and summarise them."
Nice work — you've built a real productivity workflow. Head to [Keep going](/tutorial/slack-summary/keep-going) for ideas on what to try next.
# Build It with Claude Code
Source: https://herwaka.shesharp.org.nz/tutorial/vibe-coding/build-with-claude
The core build — six prompts that turn your idea into a working Slack bot, with communication tips for every step.
This is the heart of the tutorial. You will send six prompts to Claude Code, and by the end, you will have a fully working daily report bot. No coding required — just clear communication.
With Wispr Flow running, just start speaking. Your words appear as text in Claude Code automatically. Describe what you want naturally — Claude Code understands and writes the code for you. Speaking works especially well for long, descriptive prompts because you can talk through the requirements as if explaining to a colleague.
Copy any prompt from this page and paste it into Claude Code. Or type your own request in natural language. No special syntax needed — just describe what you want.
## How to Talk to Claude Code
Think of Claude Code as a brilliant colleague who can code anything, but needs you to explain the goal clearly. The better you describe what you want, the better the result. Whether you speak or type, the approach is the same — just say what you need.
The conversation loop is always the same:
```mermaid theme={null}
flowchart LR
A["Speak or type\nwhat you want"] -->|"prompt"| B["Claude Code\nbuilds it"]
B -->|"review"| C{"Right?"}
C -->|"Not quite"| A
C -->|"Yes!"| D["Move on"]
```
Let's start building.
***
## Prompt 1: Describe the Whole Project
Before writing any code, give Claude Code the big picture. This helps it make better decisions at every step.
**Open your terminal, `cd` into your `daily-report-bot` folder, and type `claude` to start Claude Code. Then say or send this prompt:**
```text title="Say this or copy this prompt" theme={null}
I want to build a daily work report bot. Here's what it should do:
1. Run every weekday morning via GitHub Actions
2. Read my recent git commits from this repository
3. Use OpenAI's API to turn those commits into a friendly, human-readable daily standup update
4. Post the update to a Slack channel via a webhook
The bot should be written in Node.js. It should support a "dry run" mode
that prints the report to the console without posting to Slack.
I also want a "commit banking" feature: if I make 10 commits on Monday
but none on Tuesday, the bot should spread them across the week so every
day has something to report.
Can you start by creating a project structure with a package.json and
the main entry point? Don't write the full logic yet — just set up the
skeleton.
```
**What happens:** Claude Code creates a `package.json`, a main script file (e.g. `index.js` or `src/index.js`), and possibly a config file. It sets up the basic project structure without filling in the logic.
**Communication skill: Setting context.** Notice how the prompt starts with the big picture ("daily work report bot"), then lists specific requirements, then asks for a specific first step. This gives Claude Code enough context to make smart choices about project structure, naming, and dependencies.
Claude Code will typically create something like:
```
daily-report-bot/
package.json
src/
index.js # Main entry point
commits.js # Will collect git commits
summarise.js # Will call OpenAI
slack.js # Will post to Slack
bank.js # Will handle commit banking
.env.example # Template for environment variables
```
The exact structure may vary — that's fine. Claude Code is making reasonable decisions based on your description.
***
## Prompt 2: Build the Commit Collector
Now let's build the first real piece — the script that reads your git commits.
```text title="Say this or copy this prompt" theme={null}
Now build the commit collector. It should:
1. Use git log to read commits from the last 24 hours (or a configurable time window)
2. Extract the commit message, author, and timestamp for each commit
3. Return them as a structured array
4. Handle the case where there are no commits gracefully
5. Use a separator that won't conflict with shell operators — not || or &&
Export the function so other parts of the project can use it.
```
**What happens:** Claude Code writes a function that runs `git log` with the right format string, parses the output, and returns a clean array of commit objects.
**Communication skill: Breaking work into steps.** Instead of asking Claude Code to build everything at once, we're doing one piece at a time. This makes each step easier to review, and if something goes wrong, you know exactly where.
**Speaking technical prompts works well.** Wispr Flow handles technical terms like "git log", "API", and "environment variable" accurately. If it mishears something, you can quickly correct the text before pressing Enter.
```javascript theme={null}
// src/commits.js
const { execSync } = require('child_process');
function getRecentCommits(hours = 24) {
const since = new Date(Date.now() - hours * 60 * 60 * 1000).toISOString();
try {
const output = execSync(
`git log --since="${since}" --pretty=format:"%H%s%an%aI" --no-merges`,
{ encoding: 'utf-8' }
);
if (!output.trim()) {
return [];
}
return output.trim().split('\n').map(line => {
const [hash, message, author, date] = line.split('');
return { hash, message, author, date };
});
} catch (error) {
console.error('Failed to read git log:', error.message);
return [];
}
}
module.exports = { getRecentCommits };
```
***
## Prompt 3: Add the Smart Distribution (Commit Banking)
This is the cleverest part of the bot. If you do all your work on Monday, you don't want Tuesday through Friday to report "nothing done." Commit banking spreads your commits across the week.
```text title="Say this or copy this prompt" theme={null}
Now build the commit banking feature. Here's how it should work:
- Keep a "bank" of unposted commits in a local JSON file called state.json
- When new commits come in, add them to the bank
- Each day, calculate how many commits to include in today's report:
divide the total banked commits by the remaining weekdays this week
(including today), and round up
- Take that many commits from the bank for today's report
- Save the remaining commits back to state.json
- On Friday, use all remaining commits so the bank starts empty on Monday
- If there are no commits in the bank at all, return an empty array
Make sure state.json can be committed to git so GitHub Actions can
persist it between runs.
```
**What happens:** Claude Code creates the banking logic with functions to load, save, and distribute commits across weekdays.
**Communication skill: Describing business logic in plain language.** You didn't write any algorithm — you described the *behaviour* you wanted. "Divide by remaining weekdays, round up, empty on Friday." Claude Code translates this into working code. This is where voice really shines — just talk through the logic as if explaining it to someone.
Here's what happens in a real week:
| Day | New commits | Banked total | Today's batch | Remaining |
| --------- | ----------- | ------------ | ----------------- | --------- |
| Monday | 10 | 10 | 2 (10 / 5 days) | 8 |
| Tuesday | 0 | 8 | 2 (8 / 4 days) | 6 |
| Wednesday | 3 | 9 | 3 (9 / 3 days) | 6 |
| Thursday | 0 | 6 | 3 (6 / 2 days) | 3 |
| Friday | 2 | 5 | 5 (all remaining) | 0 |
Every day has something to report, even if you didn't commit that day.
```javascript theme={null}
// src/bank.js
const fs = require('fs');
const path = require('path');
const STATE_FILE = path.join(__dirname, '..', 'state.json');
function loadState() {
try {
return JSON.parse(fs.readFileSync(STATE_FILE, 'utf-8'));
} catch {
return { bankedCommits: [] };
}
}
function saveState(state) {
fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
}
function getRemainingWeekdays() {
const today = new Date().getDay(); // 0=Sun, 1=Mon, ..., 5=Fri
if (today === 0 || today === 6) return 0;
return 6 - today; // days remaining including today: Mon=5, Tue=4, ..., Fri=1
}
function getTodaysBatch(newCommits) {
const state = loadState();
state.bankedCommits.push(...newCommits);
const remaining = getRemainingWeekdays();
if (remaining <= 0) return [];
const isFriday = new Date().getDay() === 5;
const batchSize = isFriday
? state.bankedCommits.length
: Math.ceil(state.bankedCommits.length / remaining);
const batch = state.bankedCommits.splice(0, batchSize);
saveState(state);
return batch;
}
module.exports = { getTodaysBatch, loadState, saveState };
```
***
## Prompt 4: Add the AI Summariser
Now we connect to OpenAI to turn raw commit messages into a friendly daily update.
```text title="Say this or copy this prompt" theme={null}
Now build the summariser. It should:
1. Take an array of commit objects (message, author, date)
2. Send them to OpenAI's chat completions API (use gpt-4o-mini to keep costs low)
3. Ask OpenAI to write a friendly daily standup update from these commits
4. The system prompt should tell the AI to:
- Write in first person
- Group related work together
- Keep it concise (3-5 bullet points)
- Use a warm, professional tone
- End with any blockers (or "No blockers" if none)
5. Return the formatted text
Use the OPENAI_API_KEY environment variable for authentication.
```
**What happens:** Claude Code creates a function that formats commits into a prompt, calls the OpenAI API, and returns the summary text.
You described the *behaviour* — take commits in, get a friendly summary out. You specified the model, tone, format, and how authentication works.
Claude Code wrote the API call, crafted the system prompt, handled errors, and returned clean text. It made decisions about temperature, token limits, and error handling that you didn't need to think about.
**Communication skill: Specifying integrations and output format.** When connecting to external services, tell Claude Code which API to use, what model, and what the output should look like. The more specific you are about the result, the less you'll need to iterate.
```javascript theme={null}
// src/summarise.js
const OpenAI = require('openai');
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const SYSTEM_PROMPT = `You are a helpful assistant that writes daily standup updates.
Given a list of git commits, write a concise daily update in first person.
Group related work together. Use 3-5 bullet points.
Keep the tone warm and professional.
End with "Blockers: None" unless the commits suggest otherwise.
Do not include commit hashes or timestamps.`;
async function summariseCommits(commits) {
if (commits.length === 0) {
return "No updates today — no recent commits to report.";
}
const commitList = commits
.map(c => `- ${c.message} (${c.date})`)
.join('\n');
const response = await client.chat.completions.create({
model: 'gpt-4o-mini',
messages: [
{ role: 'system', content: SYSTEM_PROMPT },
{ role: 'user', content: `Here are my recent commits:\n\n${commitList}\n\nWrite my daily standup update.` }
],
temperature: 0.7,
max_tokens: 500,
});
return response.choices[0].message.content;
}
module.exports = { summariseCommits };
```
***
## Prompt 5: Add Slack Posting
Time to connect the output to Slack.
```text title="Say this or copy this prompt" theme={null}
Now build the Slack posting module. It should:
1. Take the summary text from the summariser
2. Post it to Slack using an incoming webhook URL
3. Use the SLACK_WEBHOOK_URL environment variable
4. Format the message nicely for Slack (use mrkdwn format)
5. Add a header like "Daily Update — [today's date]"
6. Handle errors gracefully — log the error but don't crash
Use the native https module or fetch — no need for a Slack SDK.
```
**What happens:** Claude Code creates a small function that sends a POST request to the Slack webhook with a formatted message.
**Communication skill: Building incrementally.** Notice we didn't try to build Slack posting in Prompt 1. By this point, Claude Code understands the whole project. It knows the summariser returns text, and it connects the pieces naturally.
```javascript theme={null}
// src/slack.js
async function postToSlack(summary) {
const webhookUrl = process.env.SLACK_WEBHOOK_URL;
if (!webhookUrl) {
throw new Error('SLACK_WEBHOOK_URL environment variable is not set');
}
const today = new Date().toLocaleDateString('en-NZ', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
});
const payload = {
blocks: [
{
type: 'header',
text: { type: 'plain_text', text: `Daily Update — ${today}` },
},
{
type: 'section',
text: { type: 'mrkdwn', text: summary },
},
],
};
const response = await fetch(webhookUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
if (!response.ok) {
const body = await response.text();
throw new Error(`Slack webhook failed (${response.status}): ${body}`);
}
console.log('Posted to Slack successfully.');
}
module.exports = { postToSlack };
```
***
## Prompt 6: Wire It All Together and Test Locally
The last build step — connect all the pieces and add a dry-run mode for safe testing.
```text title="Say this or copy this prompt" theme={null}
Now wire everything together in the main entry point. It should:
1. Collect recent commits using the commit collector
2. Pass them through the commit banking system
3. Send the batch to the OpenAI summariser
4. Post the summary to Slack
Add a --dry-run flag (or DRY_RUN=true environment variable) that:
- Skips the Slack posting step
- Prints the summary to the console instead
- Still updates state.json so we can test the banking logic
Also add a --channel flag or SLACK_CHANNEL environment variable that
defaults to "test". When set to "prod", use SLACK_WEBHOOK_PROD instead
of SLACK_WEBHOOK_TEST.
Add helpful console.log messages at each step so I can follow what's
happening when it runs.
```
**What happens:** Claude Code creates the main script that orchestrates all the pieces, with command-line flags and environment variable support.
**Keep your API keys safe.** Never commit `.env` files, API keys, or webhook URLs to git. We'll store them as GitHub secrets in the next section.
**Communication skill: Requesting integration and testing.** This prompt brings everything together and asks for testing support (dry-run mode). Always ask for a way to test safely before connecting to real services.
```javascript theme={null}
// src/index.js
const { getRecentCommits } = require('./commits');
const { getTodaysBatch } = require('./bank');
const { summariseCommits } = require('./summarise');
const { postToSlack } = require('./slack');
async function main() {
const isDryRun = process.argv.includes('--dry-run') || process.env.DRY_RUN === 'true';
const channel = process.argv.includes('--channel')
? process.argv[process.argv.indexOf('--channel') + 1]
: process.env.SLACK_CHANNEL || 'test';
// Set the right webhook URL based on channel
if (channel === 'prod') {
process.env.SLACK_WEBHOOK_URL = process.env.SLACK_WEBHOOK_PROD;
} else {
process.env.SLACK_WEBHOOK_URL = process.env.SLACK_WEBHOOK_TEST;
}
console.log(`Running daily report (dry-run: ${isDryRun}, channel: ${channel})`);
// Step 1: Collect commits
console.log('Collecting recent commits...');
const commits = getRecentCommits();
console.log(`Found ${commits.length} new commit(s).`);
// Step 2: Bank and batch
console.log('Processing commit bank...');
const batch = getTodaysBatch(commits);
console.log(`Today's batch: ${batch.length} commit(s).`);
if (batch.length === 0) {
console.log('No commits to report today. Exiting.');
return;
}
// Step 3: Summarise
console.log('Generating summary with OpenAI...');
const summary = await summariseCommits(batch);
console.log('\n--- Daily Report ---');
console.log(summary);
console.log('-------------------\n');
// Step 4: Post to Slack
if (isDryRun) {
console.log('Dry run — skipping Slack post.');
} else {
console.log('Posting to Slack...');
await postToSlack(summary);
}
console.log('Done!');
}
main().catch(error => {
console.error('Error:', error.message);
process.exit(1);
});
```
***
## Using Claude in Chrome to Research
Sometimes you need to look something up — Slack's webhook format, GitHub Actions syntax, or an error message. That's where Claude in Chrome comes in.
1. Open the Slack API docs or any documentation page in Chrome
2. Click the Claude in Chrome extension icon
3. Ask it to explain what you're reading, e.g.: *"What format does Slack expect for incoming webhook messages?"*
4. Use the answer to refine your next prompt to Claude Code
Take what you learned from your research and feed it back to Claude Code:
```text title="Say this or copy this prompt" theme={null}
I looked up the Slack webhook format. It supports blocks with
"mrkdwn" type for rich formatting. Can you update the Slack
module to use blocks instead of a plain text payload?
```
Claude Code updates the code based on your research.
***
## Communication Tips Summary
Instead of "build a Slack bot", say "build a function that sends a POST request to a Slack incoming webhook with a formatted message using blocks." The more specific, the fewer iterations.
Start with the big picture. Tell Claude Code what the project is, who it's for, and what tools you're using. Context helps it make better decisions about architecture, naming, and dependencies.
When using Wispr Flow, don't worry about speaking technical terms — it handles words like "API", "webhook", "JSON", and "environment variable" accurately. Speaking is especially natural for describing business logic and desired behaviour.
If you don't understand the code, ask: *"Can you explain what this function does in plain language?"* Understanding the code helps you spot issues and write better follow-up prompts.
Copy and paste the exact error message. Tell Claude Code what you expected to happen and what actually happened. Don't try to diagnose the problem yourself — let the AI help.
Your first prompt rarely produces the perfect result. That's normal. Review what Claude Code built, identify what's not quite right, and send a follow-up prompt. Each iteration gets you closer.
***
## Full Data Flow
Here's how everything connects:
```mermaid theme={null}
flowchart TD
A["GitHub Actions triggers at 9 am"] --> B["Script reads git log"]
B --> C{"New commits?"}
C -->|"Yes"| D["Add to commit bank"]
C -->|"No"| E["Use banked commits"]
D --> F["Calculate today's batch"]
E --> F
F --> G["Send batch to OpenAI"]
G --> H["OpenAI returns summary"]
H --> I["Post to Slack via webhook"]
I --> J["Save remaining commits\nto state.json"]
```
Your bot is built! Head to [Deploy and test](/tutorial/vibe-coding/deploy-and-test) to set up GitHub Actions and see it run for real.
# Deploy and Test Your Bot
Source: https://herwaka.shesharp.org.nz/tutorial/vibe-coding/deploy-and-test
Set up GitHub Actions to run your bot automatically, configure secrets, and test everything end to end.
Your bot is built. Now let's make it run automatically every morning using GitHub Actions.
## What Is GitHub Actions?
GitHub Actions is a built-in automation service that runs tasks for you. You tell it *when* to run (e.g. every weekday at 9 am) and *what* to do (e.g. run your bot script), and it handles the rest — no server needed.
When you push a workflow file (a YAML file in `.github/workflows/`), GitHub watches for the trigger you defined. When the trigger fires — a scheduled time, a push, or a manual button press — GitHub spins up a virtual machine, checks out your code, installs dependencies, and runs your commands. It's like having a free computer in the cloud that does one job and shuts down.
***
## Prompt 7: Create the GitHub Actions Workflow
Ask Claude Code to create the automation — say this or paste it:
```text title="Say this or copy this prompt" theme={null}
Create a GitHub Actions workflow file at .github/workflows/daily-report.yml
that:
1. Runs every weekday at 9:00 am NZST (that's around 8 PM or 9 PM UTC
depending on daylight saving — use 20:00 UTC as a reasonable default)
2. Can also be triggered manually using workflow_dispatch
3. Checks out the repository with full git history (fetch-depth: 0)
4. Sets up Node.js 20
5. Installs dependencies with npm ci
6. Runs the daily report script with these environment variables from
GitHub secrets: OPENAI_API_KEY, SLACK_WEBHOOK_TEST, SLACK_WEBHOOK_PROD
7. After the script runs, commits and pushes any changes to state.json
with the message "chore: update commit bank state [skip ci]"
8. The commit should use a bot identity for the git author
Add comments explaining each section of the workflow file.
```
**What happens:** Claude Code creates a complete workflow file with the cron schedule, checkout, setup, and run steps.
**About cron timing:** GitHub Actions cron uses UTC. New Zealand is UTC+12 (or UTC+13 during daylight saving). The schedule `0 20 * * 1-5` means "8 PM UTC, Monday to Friday" which is approximately 9 AM NZST. Cron triggers can be delayed by up to 15 minutes during busy periods — this is normal.
When the bot commits the updated `state.json`, the commit message includes `[skip ci]`. This tells GitHub Actions not to trigger another workflow run for that commit — otherwise you'd get an infinite loop of the bot triggering itself.
By default, GitHub Actions checks out only the latest commit (shallow clone). Your bot needs to read the full git history to find recent commits. Setting `fetch-depth: 0` ensures the entire history is available.
```yaml theme={null}
# .github/workflows/daily-report.yml
name: Daily Report Bot
on:
schedule:
# Run at 8 PM UTC (approx 9 AM NZST), Monday to Friday
- cron: '0 20 * * 1-5'
workflow_dispatch: # Allow manual triggering
jobs:
daily-report:
runs-on: ubuntu-latest
steps:
# Check out the full repository history
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
# Set up Node.js
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
# Install dependencies
- name: Install dependencies
run: npm ci
# Run the daily report bot
- name: Run daily report
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
SLACK_WEBHOOK_TEST: ${{ secrets.SLACK_WEBHOOK_TEST }}
SLACK_WEBHOOK_PROD: ${{ secrets.SLACK_WEBHOOK_PROD }}
SLACK_CHANNEL: prod
run: node src/index.js
# Commit updated state.json so the commit bank persists
- name: Commit state changes
run: |
git config user.name "daily-report-bot"
git config user.email "bot@users.noreply.github.com"
git add state.json
git diff --staged --quiet || git commit -m "chore: update commit bank state [skip ci]"
git push
```
***
## Configure GitHub Secrets
Your bot needs three secrets. Never commit these to your code — store them in GitHub's encrypted secrets.
**Never commit API keys, webhook URLs, or other secrets to your code.** Anyone who can see your repository could steal them. GitHub Secrets encrypts them and makes them available only during workflow runs.
If you have the [GitHub CLI](https://cli.github.com) installed:
```bash title="Copy this command" theme={null}
gh secret set OPENAI_API_KEY
gh secret set SLACK_WEBHOOK_TEST
gh secret set SLACK_WEBHOOK_PROD
```
Each command will prompt you to paste the value.
Open your repository on GitHub → **Settings** → **Secrets and variables** → **Actions**
Click **New repository secret**. Name: `OPENAI_API_KEY`. Value: paste your OpenAI API key. Click **Add secret**.
Click **New repository secret**. Name: `SLACK_WEBHOOK_TEST`. Value: paste your test channel webhook URL. Click **Add secret**.
Click **New repository secret**. Name: `SLACK_WEBHOOK_PROD`. Value: paste your production channel webhook URL. Click **Add secret**.
***
## Push and Deploy
```bash title="Copy this command" theme={null}
git add -A
git commit -m "feat: add daily report bot"
```
```bash title="Copy this command" theme={null}
git push origin main
```
Go to your repository on GitHub → **Actions** tab. You should see the "Daily Report Bot" workflow listed. It will run automatically on the next scheduled time, or you can trigger it manually.
***
## Test the Workflow
Trigger the workflow manually with a dry run to check everything works without posting to Slack:
```bash title="Copy this command" theme={null}
gh workflow run daily-report.yml
```
Or on the GitHub website: **Actions** → **Daily Report Bot** → **Run workflow**.
Check the logs to see the output. You should see the commit collection, banking, and summary steps complete successfully.
If the dry run looks good, trigger a real run that posts to your test Slack channel. Check the `SLACK_CHANNEL` environment variable is set to `test` in the workflow file, then trigger again.
Go to your test Slack channel — you should see a message like this:
```
Daily Update — Tuesday, 11 March 2026
- Set up the daily report bot project structure and core modules
- Built the commit banking system to distribute updates across the week
- Integrated OpenAI for natural language summaries
Blockers: None
```
Your bot works! It will now run automatically every weekday morning.
***
## Prompt 8: Troubleshoot
Things don't always work on the first try. Here's the pattern for debugging with Claude Code:
```text title="Say this or copy this prompt" theme={null}
I'm getting this error when the GitHub Actions workflow runs:
[paste the exact error message here]
The workflow is supposed to collect git commits, summarise them with
OpenAI, and post to Slack. Can you help me figure out what went wrong
and fix it?
```
**Communication skill: Describing errors.** Always paste the exact error message. Tell Claude Code what you expected to happen and what actually happened. The more context, the faster the fix. If you're using Wispr Flow, you can speak through the issue — "I'm getting an error that says..." — and then paste the actual error text.
### Common Issues
**Possible causes:**
* The workflow file isn't on the default branch (usually `main`). Scheduled workflows only run from the default branch.
* The cron schedule is in UTC, not your local time. Double-check the conversion.
* GitHub Actions can delay cron triggers by up to 15 minutes during busy periods.
**Possible causes:**
* The webhook URL has been revoked or is incorrect. Go to your Slack app settings and check.
* The secret name in your workflow doesn't match what you set in GitHub Secrets.
* You're using the test webhook URL but the environment variable points to prod (or vice versa).
**Possible cause:** The git log separator conflicts with shell operators. Using `||` or `&&` as separators will break because the shell interprets them. Use a safe separator like `` instead.
**Possible cause:** If someone pushes to the repository at the same time as the bot tries to commit `state.json`, you'll get a conflict. The `[skip ci]` tag prevents cascading runs, but timing conflicts can still happen. This is rare in practice.
**Possible causes:**
* The time window is too short. The default is 24 hours, but if the workflow runs at a slightly different time, some commits might fall outside the window.
* `fetch-depth: 0` is missing from the checkout step, so the git history isn't available.
***
## Switch to Production
Once you're happy with the test output, switch to the production channel:
1. In your workflow file (`.github/workflows/daily-report.yml`), change `SLACK_CHANNEL: test` to `SLACK_CHANNEL: prod`
2. Commit and push
Or ask Claude Code:
```text title="Say this or copy this prompt" theme={null}
Change the default Slack channel in the GitHub Actions workflow from
"test" to "prod" so the daily reports go to the production channel.
```
That's it — your bot is live.
Your bot is deployed and running! Head to [What's next](/tutorial/vibe-coding/whats-next) for ideas to extend it, lessons learned, and reflection questions.
# Vibe Coding: Build a Daily Work Report Bot
Source: https://herwaka.shesharp.org.nz/tutorial/vibe-coding/overview
Learn to build a Slack bot that writes your daily standup for you — without writing a single line of code yourself. Just describe what you want by speaking or typing, and Claude Code builds it.
**Difficulty: ★★★★★ Advanced** · Estimated time: \~2 hours
**Workshop led by [Chan Meng](https://chanmeng.org/)** — Senior AI/ML Engineer, open-source contributor, and former ByteDance developer. Chan has built 30+ live applications and specialises in AI-powered solutions. She is also a panel speaker at this event and the developer behind this website.
## The Problem
You just joined a new team. Your manager posts in Slack: *"From now on, everyone posts a daily update — what you finished, what you're working on, any blockers."*
The first week, you do it diligently. By week two, you forget half the time. By week three, you're copy-pasting yesterday's message and changing a few words.
Sound familiar? You're not lazy — you're human. The information already exists in your git commits. You just need something to read those commits and turn them into a friendly daily update, automatically, every morning.
**That's what we're building.** And we're not writing a single line of code ourselves. Just describe what you want — by speaking or typing — and Claude Code builds it all.
## What Is Vibe Coding?
**Vibe coding** means describing what you want in plain language and letting AI write the code for you. You guide the direction, review the results, and iterate until it works. Think of it as directing a builder — you don't need to lay the bricks yourself, but you do need to explain what the house should look like. With voice input via Wispr Flow, you can literally speak your ideas into existence.
**Built on your CLI skills.** If you completed earlier tutorials using Gemini CLI, you already know how to work with AI in the terminal — speaking prompts, approving tool calls, and reviewing results. Claude Code uses the same workflow, but can write, edit, and deploy real code. The difference is power, not process.
## What You Will Build
Gathers your recent git commits automatically
Uses AI to write a friendly daily update from your commits
Sends it to your Slack channel every morning
## How It Works
```mermaid theme={null}
flowchart LR
A["You speak or type\nwhat you want"] -->|"natural language"| B["Claude Code\nwrites all the code"]
B -->|"builds"| C["Your Git Commits"]
C -->|"GitHub Actions\nruns every morning"| D["Collect Script"]
D -->|"sends commits"| E["OpenAI API"]
E -->|"friendly summary"| F["Slack Channel"]
```
You describe what you want — by speaking through Wispr Flow or typing in the terminal. Claude Code writes the code. Once deployed, the bot runs automatically every morning: it collects your git commits, sends them to an AI model to be rewritten as a human-friendly update, and posts the result straight to Slack.
## What You Will Learn
This tutorial focuses on **communication skills with AI**, not coding knowledge. You will learn how to:
* Write clear prompts that get the result you want on the first try
* Break a project into small, buildable steps
* Describe business logic in plain language so AI can implement it
* Iterate and refine when the first result isn't quite right
* Use multiple AI tools together (Claude Code for building, Claude in Chrome for research)
* Use voice input to speed up your workflow with Wispr Flow
You do not need to know how to code. Claude Code writes the code — your job is to describe what you want clearly. If you can explain an idea to a colleague, you can vibe code. Speaking your ideas out loud through Wispr Flow makes this even more natural.
## The Vibe Coding Workflow
Every step in this tutorial follows the same loop:
```mermaid theme={null}
flowchart LR
A["You speak or type\nwhat you want"] -->|"prompt"| B["Claude Code\nwrites the code"]
B -->|"you review"| C{"Happy?"}
C -->|"Not quite"| A
C -->|"Yes!"| D["Next step"]
```
You describe. Claude Code builds. You review. Repeat until it's right, then move on.
**Voice or keyboard — your choice.** With Wispr Flow, you can speak your prompts naturally and your words appear as text in Claude Code. Every prompt in this tutorial works whether you speak it or type it. Voice is especially handy for describing complex features — just talk through what you want as if explaining to a colleague.
## Tools You Will Use
Your AI coding partner. You describe what you want in plain language, and it writes the code. Runs in your terminal.
Optional voice input tool — speak instead of type. Works in any application, including your terminal. Your words flow directly into Claude Code as text.
A browser extension that helps you research documentation, understand error messages, and find answers — without leaving your browser.
The AI service that reads your git commits and writes a human-friendly daily update. We use this as the summariser inside the bot.
GitHub's built-in automation. It runs your bot every morning on a schedule — no server needed.
A free tool needed to install Claude Code and run your bot. One-time setup.
## Cost
| Tool | Cost |
| ---------------- | ---------------------------------------------------------------------------------- |
| Claude Code | Free tier available |
| Wispr Flow | Free trial ([invite link for a free month of Pro](https://wisprflow.ai/r?CHAN115)) |
| Claude in Chrome | Free |
| OpenAI API | \~\$0.01/day (a few cents per month) |
| GitHub Actions | Free for public repos (2,000 mins/month for private) |
| Slack | Free |
| **Total** | **\~\$0/month** |
Ready to get started? Head to [Set up your tools](/tutorial/vibe-coding/setup) to get everything ready.
# Set Up Your Tools
Source: https://herwaka.shesharp.org.nz/tutorial/vibe-coding/setup
Get all accounts and tools ready before building your daily report bot.
Before we start building, let's make sure you have everything you need. This page walks you through each account and tool, step by step.
**You will need**: a laptop with internet access. No coding experience is required — we will guide you through every step.
## Step-by-Step Setup
GitHub is where your code lives and where the bot will run automatically each morning.
1. Go to [github.com](https://github.com)
2. Click **Sign up** if you don't have an account, or **Sign in** if you do
3. Follow the prompts to create your account (free plan is fine)
Choose a professional username — it's visible to employers and colleagues.
Claude Code is the AI coding assistant that will write all the code for us. It runs in your terminal.
Open your terminal (Terminal on Mac, PowerShell or Git Bash on Windows) and run:
```bash title="Copy this command" theme={null}
npm install -g @anthropic-ai/claude-code
```
Then start it by typing:
```bash title="Copy this command" theme={null}
claude
```
Follow the on-screen instructions to log in with your Anthropic account.
`npm` comes with Node.js. Download and install Node.js from [nodejs.org](https://nodejs.org) (choose the LTS version). After installing, close and reopen your terminal, then try the install command again.
Claude in Chrome is a browser extension that helps you research documentation and debug errors without leaving your browser.
1. Open Chrome and go to the [Chrome Web Store](https://chromewebstore.google.com)
2. Search for **"Claude"** by Anthropic
3. Click **Add to Chrome**
4. Pin it to your toolbar for easy access
The bot uses OpenAI's API to turn your git commits into a human-readable daily update.
1. Go to [platform.openai.com](https://platform.openai.com)
2. Sign up or log in
3. Navigate to **API keys** (in the left sidebar or under your profile)
4. Click **Create new secret key**
5. Give it a name like `daily-report-bot`
6. **Copy the key immediately** — you won't be able to see it again
7. Save it somewhere safe (a password manager is ideal)
An API key is like a password that lets your code talk to an external service. When your bot needs OpenAI to summarise your commits, it sends the API key along with the request so OpenAI knows who's asking and can charge the right account. Keep your API key secret — anyone with it can use your account.
OpenAI gives new accounts a small amount of free credit. For this project, you will spend only a few cents per month — each daily report costs roughly \$0.01.
A webhook is the address your bot sends messages to. We'll create two: one for testing and one for production.
A webhook is a URL that accepts incoming messages. When your bot sends data to this URL, Slack automatically posts it as a message in the channel you chose. Think of it as a letterbox — your bot drops a letter in, and Slack delivers it to the right room.
**Create the Slack app:**
1. Go to [api.slack.com/apps](https://api.slack.com/apps)
2. Click **Create New App** → **From scratch**
3. Name it `Daily Report Bot`
4. Select your workspace
5. Click **Create App**
**Add incoming webhooks:**
1. In your app settings, click **Incoming Webhooks** in the left sidebar
2. Toggle **Activate Incoming Webhooks** to **On**
3. Click **Add New Webhook to Workspace**
4. Choose a **test channel** (e.g. `#bot-testing`) and click **Allow**
5. Copy the webhook URL — this is your **test webhook**
6. Repeat steps 3–5, but choose your **production channel** (e.g. `#daily-standup`) — this is your **production webhook**
Save both URLs somewhere safe.
Never commit webhook URLs to your code. We will store them as GitHub secrets later.
This is where your bot's code will live.
1. Go to [github.com/new](https://github.com/new)
2. Name it `daily-report-bot`
3. Set it to **Private** (recommended, since it will contain your work commits)
4. Tick **Add a README file**
5. Click **Create repository**
Then clone it to your computer:
```bash title="Copy this command" theme={null}
git clone https://github.com/YOUR-USERNAME/daily-report-bot.git
cd daily-report-bot
```
Replace `YOUR-USERNAME` with your actual GitHub username.
Wispr Flow lets you speak your prompts to Claude Code instead of typing them. Your voice is converted to text that flows directly into the terminal — Claude Code sees it the same way as typed input.
**This step is optional.** Wispr Flow lets you speak instead of type — handy if you prefer talking over typing. Skip this step if you'd rather type your prompts.
**Sign up using this invite link to get a free month of Pro:**
[https://wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
Both you and the tutorial author benefit — you get a free month of Pro, and they get a free month when you dictate 2,000 words!
1. **Sign up** at [wisprflow.ai/r?CHAN115](https://wisprflow.ai/r?CHAN115)
2. **Download and install** the app for your operating system
3. **Configure settings** — enable these options for the best experience:
* Experimental > **Command Mode** — Enable advanced voice commands
* **Press Enter Command** — Automatically press enter when you say "press enter"
* **Bulk Import** — Import snippets and dictionary items
Wispr Flow is a voice-to-text tool that lets you dictate instead of type. It works in any application, including your terminal. Instead of typing a long prompt to Gemini CLI, you can just say it out loud. This is especially useful if you find typing slow or tiring.
**Why voice input for coding?** When you're describing features, business logic, or debugging issues to Claude Code, speaking is often faster and more natural than typing. You can talk through what you want as if explaining to a colleague — Wispr Flow handles the transcription, and Claude Code handles the code.
## Verify Your Setup
Before moving on, check that everything is ready:
You can log into [github.com](https://github.com) and see your new `daily-report-bot` repository.
Run `claude --version` in your terminal. You should see a version number.
You see the Claude icon in your Chrome toolbar. Clicking it opens the extension.
You have an API key saved somewhere safe (it starts with `sk-`).
You have two webhook URLs saved: one for your test channel and one for your production channel.
You have the `daily-report-bot` folder on your computer and can `cd` into it.
Wispr Flow is running and you can see your spoken words appear as text in any application.
All set? Head to [Build it with Claude Code](/tutorial/vibe-coding/build-with-claude) — the fun part.
# What's Next
Source: https://herwaka.shesharp.org.nz/tutorial/vibe-coding/whats-next
Recap, extend your bot, learn from common pitfalls, and reflect on your vibe coding experience.
Congratulations — you built a working Slack bot without writing a single line of code yourself. You described what you wanted — by speaking or typing — and Claude Code turned your words into a fully automated daily report bot. Let's recap what you achieved, explore where to take it next, and reflect on the experience.
## What You Built
```mermaid theme={null}
flowchart TD
A["You spoke or typed\nwhat you wanted"] -->|"Claude Code\nwrote the code"| B["GitHub Actions\ntriggers at 9 am"]
B --> C["Script reads git log"]
C --> D{"New commits?"}
D -->|"Yes"| E["Add to commit bank"]
D -->|"No"| F["Use banked commits"]
E --> G["Calculate today's batch"]
F --> G
G --> H["Send batch to OpenAI"]
H --> I["OpenAI returns summary"]
I --> J["Post to Slack via webhook"]
J --> K["Save remaining commits\nto state.json"]
```
A daily report bot that:
* Collects your git commits automatically
* Distributes them across the working week using commit banking
* Summarises them into a friendly daily update using AI
* Posts the update to your Slack channel every morning
***
## What You Actually Learned
The code is useful, but the real skills you practised are transferable to any project:
**The skill that matters most isn't coding — it's communication.** You learned to break a problem into steps, describe each step clearly, and iterate until the result is right. Whether you spoke your prompts through Wispr Flow or typed them, the core skill is the same: explaining what you want so an AI can build it. These are the same skills that make someone effective working with any AI tool, in any field.
## How you got here
If you worked through the earlier tutorials, you have been building CLI skills step by step:
* **Gmail Summary:** First time using Gemini CLI in the terminal
* **Obsidian Daily / Organise:** Voice commands controlling apps through Gemini CLI
* **Auckland Commute / Personal Website:** Gemini CLI working with real APIs and live data
* **Professional PDF / Slack Summary:** Gemini CLI with MCP servers and extensions
Claude Code works the same way — you speak or type in the terminal, the AI does the work, and you approve the results. The only difference is that Claude Code is smarter and can handle full engineering projects. Everything you learned with Gemini CLI prepared you for this moment.
***
Here's what you practised:
* **Setting context** — giving Claude Code the big picture before diving into details
* **Breaking work into steps** — tackling one piece at a time instead of everything at once
* **Describing business logic** — explaining what you want in plain language, not code
* **Specifying integrations** — being clear about which APIs, formats, and tools to use
* **Building incrementally** — each step builds on the previous one
* **Requesting testing** — always asking for a safe way to verify before going live
* **Debugging with AI** — describing errors clearly and letting the AI help diagnose
* **Using voice as input** — speaking naturally to describe features and requirements
***
## The Commit Banking Algorithm
For those curious about the maths behind commit banking:
The algorithm is simple but effective:
**Rule:** Each day, divide the total banked commits by the number of remaining weekdays (including today), and round up. On Friday, use everything.
Here's a full week example with 15 commits made on Monday:
| Day | Banked | Remaining days | Batch size | Sent | Left |
| --------- | ------ | -------------- | -------------- | ---- | ---- |
| Monday | 15 | 5 | ceil(15/5) = 3 | 3 | 12 |
| Tuesday | 12 | 4 | ceil(12/4) = 3 | 3 | 9 |
| Wednesday | 9 | 3 | ceil(9/3) = 3 | 3 | 6 |
| Thursday | 6 | 2 | ceil(6/2) = 3 | 3 | 3 |
| Friday | 3 | 1 | 3 (all) | 3 | 0 |
Another example — commits arrive throughout the week:
| Day | New | Banked | Batch | Sent | Left |
| --------- | --- | ------ | ------------- | ---- | ---- |
| Monday | 4 | 4 | ceil(4/5) = 1 | 1 | 3 |
| Tuesday | 0 | 3 | ceil(3/4) = 1 | 1 | 2 |
| Wednesday | 6 | 8 | ceil(8/3) = 3 | 3 | 5 |
| Thursday | 0 | 5 | ceil(5/2) = 3 | 3 | 2 |
| Friday | 1 | 3 | 3 (all) | 3 | 0 |
The bank always empties by Friday, so Monday starts fresh.
***
## Ideas to Try Next
Use the same approach — speak or type what you want, and let Claude Code build it:
Ask Claude Code to create a separate workflow that runs on Friday and posts a summary of the entire week's work — a "weekly digest" instead of a daily update.
Replace the Slack webhook with a Teams incoming webhook. The message format is slightly different, but Claude Code can handle the conversion.
Extend the bot to pull in your recent Jira tickets or Trello card movements alongside git commits, giving a fuller picture of your day.
Ask Claude Code to add a random motivational quote at the end of each report. A small touch that makes daily updates more fun.
Here's a prompt to get you started on any of these — say it or paste it into Claude Code:
```text title="Say this or copy this prompt" theme={null}
I want to add a weekly summary feature. Every Friday, after the daily
report, generate a second message that summarises everything posted
Monday through Friday. Post it to Slack with the header
"Weekly Summary — [date range]".
```
***
## Pitfalls and Lessons Learned
If you use `||` as a separator in `git log --pretty=format`, the shell will treat it as a logical OR. Use a safe separator like `` instead. This is a classic gotcha that trips up even experienced developers.
Scheduled workflows can be delayed by up to 15 minutes during periods of high demand. Don't rely on exact timing — design your bot to work regardless of when it runs.
The commit bank state needs to persist between runs. Since GitHub Actions starts fresh each time, `state.json` must be committed to the repository. That's why the workflow includes a step to commit and push it after each run.
By default, `actions/checkout` only fetches the latest commit (shallow clone). Your bot needs the full git history to find recent commits. Always set `fetch-depth: 0`.
Store all secrets in GitHub Secrets, not in your code. If you accidentally commit a secret, revoke it immediately and generate a new one. Git history keeps deleted content — removing a secret from the latest commit doesn't remove it from history.
***
## Reflect
Take a few minutes to think about your experience:
Many people are surprised by how much can be accomplished just by describing what they want clearly. Was there a moment where Claude Code's output exceeded your expectations? What about a moment where you had to refine your prompt?
If you used Wispr Flow, you may have noticed that speaking encourages you to explain things more naturally — the way you'd describe something to a colleague. Did voice input change how you communicated with Claude Code? Did it make the process faster or more intuitive?
Vibe coding isn't just for building bots. Think about repetitive tasks in your job — reports, data formatting, email templates. Could you use Claude Code to automate any of them? Could voice input make it even faster to prototype ideas?
Now that you know the workflow — describe, build, review, iterate — what else could you create? A Slack bot that answers FAQs? A script that organises your files? A tool that generates meeting notes?
***
## Resources
| Resource | Description | Link |
| -------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------- |
| Claude Code docs | Official documentation for Claude Code | [docs.anthropic.com](https://docs.anthropic.com/en/docs/claude-code) |
| Wispr Flow | Voice-to-text tool for hands-free input | [wisprflow.ai](https://wisprflow.ai/r?CHAN115) |
| GitHub Actions docs | Learn more about workflows, triggers, and secrets | [docs.github.com/actions](https://docs.github.com/en/actions) |
| OpenAI API reference | API documentation for chat completions | [platform.openai.com/docs](https://platform.openai.com/docs) |
| Slack API — Webhooks | How incoming webhooks work | [api.slack.com/messaging/webhooks](https://api.slack.com/messaging/webhooks) |
| Crontab Guru | Test and understand cron schedule expressions | [crontab.guru](https://crontab.guru) |
Thank you for completing this tutorial! You've gone from zero to a fully automated daily report bot — and more importantly, you've learned how to communicate effectively with AI tools, whether by voice or keyboard. Take these skills with you into your next project.
# #IAmRemarkable & Vibe Coding
Source: https://herwaka.shesharp.org.nz/workshop/april-2026/overview
April 2026 HER WAKA session — celebrate your achievements with #IAmRemarkable, build your own website with Vibe Coding, and get job market insights from RCSA.
**Session 2 — Tuesday 7 April 2026 | 12:00 pm – 2:00 pm**
**academyEX, 99 Khyber Pass Road, Grafton, Auckland 1023**
This session concluded on 7 April 2026 with **32 registered attendees** (24 checked in). View the [photo gallery](https://photos.app.goo.gl/Vp9jWLFzwjS1kQAj9) for highlights.
The second session of the HER WAKA series focuses on building confidence, celebrating achievements, and exploring practical AI tools.
We begin with **#IAmRemarkable**, a global movement that encourages everyone — especially those from underrepresented groups — to celebrate their achievements and challenge the stigma around self-promotion. SheSharp Founder and Director **Dr Mahsa McCauley** will guide participants through practical exercises to help recognise achievements, own your story, and confidently share your impact.
We will also introduce **Vibe Coding**, showing how anyone — even without a technical background — can use free AI tools to build and launch their own personal website through simple, natural conversations with AI.
As with the first session, **RCSA** will join to share valuable insights on the current job market and support participants with practical job-seeking guidance.
## What to Expect
* A 50-minute **#IAmRemarkable workshop** — recognise your achievements and learn to share them with confidence
* A **hands-on Vibe Coding session** — build and launch your own personal website using free AI tools
* **RCSA insights** — current job market updates and practical job-seeking guidance
## Event Schedule
| Time | Duration | Activity |
| ------------------- | -------- | ------------------------------------------------ |
| 11:30 am – 12:00 pm | 30 min | Registration and afternoon tea |
| 12:00 pm – 12:10 pm | 10 min | Welcome and kick off |
| 12:10 pm – 1:00 pm | 50 min | #IAmRemarkable |
| 1:00 pm – 1:10 pm | 10 min | Break and group photo |
| 1:10 pm – 1:40 pm | 30 min | Hands-on — Vibe Coding |
| 1:40 pm – 2:00 pm | 20 min | RCSA session — Market updates and jobseeker FAQs |
| 2:00 pm – 2:10 pm | 10 min | Closing |
## Speakers
### Dr. Mahsa McCauley
Mahsa leads the **#IAmRemarkable workshop** — a practical session on recognising your achievements and owning your story with confidence.
Dr. Mahsa McCauley is Founder and Director of SheSharp Charitable Trust. As Chair of AI Forum NZ and Associate Professor of AI at AUT, she researches AI, machine learning, IoT and cybersecurity. She serves on boards of NZTech, EdTechNZ and World Summit Awards, advancing AI strategy, education and SDG projects. Appointed Communication and Information Commissioner for NZ National Commission for UNESCO in January 2026, she leads efforts to uphold freedom of expression, expand information access and foster ethical ecosystems. A recognised public speaker on AI, cybersecurity and future work, she has received honours for leadership, innovation and advocacy for diversity in tech.
### Chan Meng
Chan leads the **Vibe Coding hands-on workshop** and is the **developer who built this website**. She brings deep technical expertise and hands-on teaching experience to this session.
Chan Meng is a Senior AI/ML Infrastructure and Full-Stack Engineer specialising in generative AI, autonomous agentic systems, and scalable cloud-native applications. She is a Founding Engineer at Gavigo and CTO at Sanicle, leading end-to-end technical delivery using Next.js, Node.js, Python, Docker, and Kubernetes. Her work includes advanced RAG architectures, LLM orchestration, and microservices, and she has contributed to open-source projects such as CopilotKit and custom Model Context Protocol (MCP) servers. With a Master's in Applied Computing and a background in mathematics education, Chan combines strong technical expertise with leadership, speaking globally at events including UN CSW69 and mentoring women in STEM.
chanmeng.org
Connect with Chan
30+ live projects
## RCSA Guest Speakers
Three recruitment leaders joined the April session for the recruiter networking activity, sharing insights into the 2026 job market and practical guidance for jobseekers.
### Abe Naus
Abe Naus is General Manager of Potentia. He works as the Kaitiaki for the Auckland business — driving the growth, success and cultural alignment of the Auckland consulting teams, ensuring they are building the right future-proofed business. His recruitment team's areas of expertise include Project Services, DevOps, Big Data & Analytics, Architects, Developers, Test Analysts, Business Analysts, AI, and Agile-skilled individuals.
### Anabella Bianchi
Director Consultant of Elevate Consulting. Born in Argentina and settled in NZ since 2005, Anabella has worked in the resourcing industry for nearly 20 years across a wide range of industries and sectors both within NZ and internationally. In the last nine years she joined the ICT industry and is extremely passionate about helping customers with the best resourcing options and project roadmaps to make them successful.
### Sri Nanduri
Senior Consultant at Potentia. Sri is an experienced Auckland-based technology recruiter with over 8 years of experience, specialising in Technology, Transformation and Digital roles within New Zealand. She has a strong background in senior client management, candidate placement and career coaching, helping professionals build personal brands and enhance their interview skills. Sri stands out for her skill in finding talent for niche, high-impact roles such as product management and technical leadership.
\#IAmRemarkable Facilitator. Founder of SheSharp. Chair of AI Forum NZ. Associate Professor of AI at AUT. UNESCO Commissioner (2026).
Vibe Coding Instructor · Website Developer. Senior AI/ML Engineer, Founding Engineer at Gavigo, CTO at Sanicle. UN CSW69 speaker.
Abe Naus (Potentia), Anabella Bianchi (Elevate Consulting), Sri Nanduri (Potentia).
## Prerequisites
* No prior tech experience required
* **You must bring your own laptop** to fully participate in the Vibe Coding hands-on activity
* Come ready to explore, learn, and celebrate your achievements
## What You Will Learn
* How to recognise and confidently share your achievements
* How to challenge the stigma around self-promotion
* How to use free AI tools to build your own personal website — without coding
* What the current job market looks like and what employers are looking for
## Photo Gallery
Browse highlights from the #IAmRemarkable & Vibe Coding session.
## Next Session
The April 7 session has concluded. The next HER WAKA cohort focuses on cybersecurity careers and is by invitation only.
This session was hands-on and interactive. For the Vibe Coding activity, you can follow along anytime with the [Build Your Personal Website](/tutorial/personal-website/overview) tutorial.
# Personal Branding & Growth Tips
Source: https://herwaka.shesharp.org.nz/workshop/june-2026/overview
June 2026 HER WAKA session — treat your career like a Go-To-Market strategy with Andrea Halal, building visibility, credibility, and genuine professional networks through LinkedIn.
**Session 4 — Tuesday 2 June 2026 | 12:00 pm – 2:00 pm**
**academyEX, 99 Khyber Pass Road, Grafton, Auckland 1023**
The fourth and final cohort of the HER WAKA series focuses on **personal branding and career growth** — treating your career like a Go-To-Market strategy.
**Andrea Halal**, Tech Marketing Leader at Ideqa and creator of *Big Leap Energy*, will share how she rebuilt her network and professional credibility after moving to New Zealand with no local connections. Drawing on nine years of marketing experience across TV, production, advertising, brand management, and B2B marketing, Andrea will walk participants through the practical steps for building visibility and trust when you are new, relocating, or pivoting.
Expect a grounded, strategy-driven session on using LinkedIn as a career tool (not a highlight reel), on why positioning matters as much as performance, and on how relationships quietly compound over time.
As with every HER WAKA cohort, **RCSA** will join the session to share insights on the current New Zealand job market and offer practical guidance on job-seeking.
## What to Expect
* A **personal branding masterclass** with Andrea Halal — career as a GTM strategy
* Practical steps for **building visibility, credibility, and networks** from scratch
* How to use **LinkedIn as a career tool** — positioning, presence, and quiet relationship-building
* **RCSA insights** — current job market updates and practical jobseeker guidance
## Event Schedule
| Time | Duration | Activity |
| ------------------- | -------- | ------------------------------------------------- |
| 11:30 am – 12:00 pm | 30 min | Registration and afternoon tea |
| 12:00 pm – 12:10 pm | 10 min | Welcome and kick off |
| 12:10 pm – 1:10 pm | 60 min | Personal Branding & Growth Tips with Andrea Halal |
| 1:10 pm – 1:20 pm | 10 min | Break and group photo |
| 1:20 pm – 1:50 pm | 30 min | RCSA — Market updates and jobseeker FAQs |
| 1:50 pm – 2:00 pm | 10 min | Closing and next-step guidance |
## Speaker
### Andrea Halal
Andrea leads the **Personal Branding & Growth Tips** session — a practical, strategy-driven workshop on treating your career like a Go-To-Market plan.
Andrea Halal is a Tech Marketing Leader at Ideqa driving B2B growth across ANZ, and the creator of **Big Leap Energy** — a career Go-To-Market methodology for tech professionals building visibility, credibility, and networks from scratch. After relocating to New Zealand with no local connections, she applied marketing thinking to her own career and rebuilt from zero. She is Ambassador Lead and Operations Strategy at The Marketing Club AU/NZ, and writes and speaks on personal branding, LinkedIn as a career tool, and the mindset of showing up before you feel ready.
Connect with Andrea
### Guest Speaker
**RCSA representative** — sharing insights into the current New Zealand job market, recruitment trends, and practical guidance for jobseekers.
Tech Marketing Leader at Ideqa · Creator of Big Leap Energy · 9 years marketing experience · LinkedIn-as-a-career-tool advocate.
Job market updates and practical jobseeker guidance.
## Prerequisites
* No prior tech experience required
* Come with an idea of what you want next in your career — even a fuzzy one
* A LinkedIn account (existing or new) will help you apply the session in real time
## What You Will Learn
* How to treat your career like a Go-To-Market plan
* How to position yourself when you are new, relocating, or pivoting
* How to use LinkedIn as a career tool — without the highlight-reel pressure
* Why relationships compound, and how to invest in them sustainably
## Register
Secure your spot for the June 2 session. Places are limited to 25 participants.
This is the final session in the HER WAKA series. After this cohort, you remain part of the SheSharp community — see the [tech communities](/resources/tech-communities) and [networking guide](/resources/networking-guide) for ways to stay connected.
# AI Tools Introduction
Source: https://herwaka.shesharp.org.nz/workshop/march-2026/ai-tools-intro
Overview of AI tools, categories, workplace relevance, and ethical considerations.
This page provides an overview of the AI tools covered in the March 2026 workshop. You do not need any prior experience with these tools — we will guide you through each one.
## What Are AI Tools?
AI tools are software applications that use artificial intelligence to help you complete tasks more quickly and effectively. In the context of job seeking, they can help with writing, research, learning, and communication.
## Categories of AI Tools
| Category | What It Does | Examples |
| ------------------------ | --------------------------------------------------- | ------------------------------ |
| **Writing assistants** | Help draft, edit, and improve written content | ChatGPT, Claude, Grammarly |
| **Job search platforms** | Use AI to match you with relevant job listings | Seek, LinkedIn, Indeed |
| **Learning tools** | Provide personalised learning and skill development | Coursera, LinkedIn Learning |
| **Productivity tools** | Automate tasks and help you stay organised | Notion AI, Google Workspace AI |
## Why AI Matters for Job Seekers
* **CV and cover letters**: AI can help you tailor your applications to specific roles
* **Interview preparation**: Practice answering common questions with AI-powered tools
* **Skill development**: Identify gaps and find resources to upskill
* **Job matching**: AI-powered platforms can surface opportunities you might miss
## Ethical Considerations
When using AI tools, keep these principles in mind:
* **Be honest**: Always review and personalise AI-generated content — it should represent you authentically
* **Check accuracy**: AI can make mistakes. Verify facts, dates, and details before submitting anything
* **Protect your privacy**: Be cautious about sharing personal information with AI tools
* **Use it as a tool, not a replacement**: AI supports your effort — your experience and voice are what matter most
# Hands-On Exercises
Source: https://herwaka.shesharp.org.nz/workshop/march-2026/hands-on-exercises
Step-by-step exercises using AI tools for cover letters, job search, and more.
These exercises will be completed during the March 2026 workshop with facilitator support. You can also revisit them at your own pace afterwards.
## Exercise 1: Write a Cover Letter with AI
**Goal**: Use an AI writing assistant to draft a tailored cover letter.
Go to [Seek](https://www.seek.co.nz) or [Indeed](https://nz.indeed.com) and find a job listing that interests you. Copy the job description.
Go to [ChatGPT](https://chat.openai.com) or [Claude](https://claude.ai). Create a free account if you do not have one.
Paste the job description and ask the AI to help you write a cover letter. For example: *"Help me write a cover letter for this role. I have experience in \[your experience]. Keep it professional and under one page."*
Read through the AI's draft carefully. Edit it to sound like you — add your own experiences, adjust the tone, and correct any details.
***
## Exercise 2: AI-Powered Job Search
**Goal**: Use AI features on job platforms to find relevant roles.
On Seek or Indeed, set up AI-powered job alerts based on your skills and preferences.
Use LinkedIn's AI suggestions to improve your profile headline and summary.
Review the AI-recommended jobs on each platform. Note which ones match your goals and why.
***
## Exercise 3: Explore an AI Tool
**Goal**: Get comfortable using an AI assistant for everyday tasks.
Pick one of the AI tools introduced in the workshop (ChatGPT, Claude, or Grammarly).
Try asking the tool to explain a concept, summarise an article, or help you practise interview answers.
Think about how this tool could help you in your job search. What worked well? What surprised you?
Remember: AI is a tool to support you, not to do the work for you. Always review, personalise, and fact-check any AI-generated content.
# AI & The Future of Work
Source: https://herwaka.shesharp.org.nz/workshop/march-2026/overview
March 2026 HER WAKA session — AI panel discussion, hands-on AI workshop, and RCSA tech hiring insights.
**Session 1 — Wednesday 25 March 2026 | 12:00 pm – 2:00 pm**
**academyEX — Pikopiko Room, 99 Khyber Pass Road, Grafton, Auckland 1023**
This session concluded on 25 March 2026 with **39 registered attendees** (27 checked in). View the [photo gallery](https://photos.app.goo.gl/FKFwVTSD7RxK7Sws6) for highlights.
Our March HER WAKA session focuses on Artificial Intelligence and the evolving tech job market in 2026. This session will help participants understand how AI is influencing job opportunities, recruitment trends, and the skills that matter most right now.
## What to Expect
* A dynamic **AI Panel Discussion** featuring industry professionals
* A short, **hands-on workshop** exploring practical AI tools and how they are shaping workplaces — by the end, each participant will have created something on their own computer
* A **special guest speaker from RCSA** sharing insights into the 2026 tech hiring landscape and what employers are looking for
## Event Schedule
| Time | Duration | Activity |
| ------------- | -------- | ------------------------------------------- |
| 11:30 – 12:00 | 30 min | Setup and registration |
| 12:00 – 12:10 | 10 min | Welcome, karakia, and SheSharp introduction |
| 12:10 – 12:45 | 35 min | Panel — AI & Future of Jobs 2026 |
| 12:45 – 12:55 | 10 min | Q\&A |
| 12:55 – 13:05 | 10 min | Break and group photo |
| 13:05 – 13:20 | 15 min | RCSA session — Tech job market updates |
| 13:20 – 13:50 | 30 min | Hands-on AI activity |
| 13:50 – 14:00 | 10 min | Closing |
## Panel Speakers
### Chan Meng
Chan is the **panel speaker**, **vibe coding workshop instructor**, and the **developer who built this website**. She brings a rare combination of deep technical expertise and hands-on teaching experience to this session.
Chan Meng is a Senior AI/ML Infrastructure and Full-Stack Engineer who specialises in architecting generative AI solutions, autonomous agentic systems, and highly scalable cloud-native applications. Currently serving as a Founding Engineer at Gavigo and CTO at Sanicle, she drives end-to-end technical execution using advanced frameworks including Next.js, Node.js, Python, Docker, and Kubernetes. Her deep engineering expertise spans advanced RAG architectures, LLM orchestration, and complex microservices.
Chan holds a Master's degree in Applied Computing (with Distinction, Dean's List) and has professional experience at ByteDance. She is an active open-source contributor to projects including CopilotKit (24.6k+ GitHub stars) and Anthropic's MCP Servers, and has built 30+ live commercial and open-source applications spanning AI agents, FemTech platforms, MCP servers, and developer tools.
She is a recognised global speaker — presenting at **UN CSW 69** in New York on AI-powered women's workplace health solutions — and a dedicated STEM mentor through Forward with Her and SheSharp. She holds 25+ professional certifications from HackerRank, Microsoft, Google, GitHub, Docker, and Anthropic.
chanmeng.org
Connect with Chan
30+ live projects
### Dr. Mahsa McCauley
Dr. Mahsa McCauley is Chair of the AI Forum New Zealand and a leading expert in artificial intelligence whose work bridges technology, education and policy. She is an Associate Professor of AI at Auckland University of Technology and a Fulbright Scholar, with research spanning AI, machine learning, IoT and cybersecurity. She is the Founder and Director of SheSharp Charitable Trust, a volunteer-led organisation supporting women in technology. In January 2026, she was appointed Communication and Information Commissioner for the New Zealand National Commission for UNESCO. She is a recognised public speaker and commentator on AI, cybersecurity and the future of work.
### Nikita Kumari
Nikita Kumari is a PMP-certified Product and Project Manager with over 6 years of experience delivering AI and digital products in B2B SaaS. She began her career as a Python developer, building a strong technical foundation before moving into product and agile delivery roles. Her work includes hands-on involvement in AI and machine learning initiatives, focused on real business outcomes — improving decision-making, automating workflows, and enhancing user experience. Now based in Auckland, she is passionate about practical leadership and sharing honest insights from her journey — especially for professionals building careers in product, tech, and AI in a new country.
### Meeta Patel
Dr. Meeta Patel is Programme Lead and Lead Facilitator for *Leading Change for Good* at academyEX, with a career spanning industry, research and academia. With a background as a research scientist, she spent many years in applied research before moving into education, reflecting a commitment to learning and community. In this role, she leads and delivers the programme end-to-end, ensuring a meaningful and impactful experience for participants. Outside of professional work, she is an Ambassador for SheSharp, a non-profit organisation focused on bridging the gender gap, and is actively involved in the community, driven by a strong belief in equity and the power of people to create change.
Connect with Meeta
Panel Speaker · Workshop Instructor · Website Developer. Senior AI/ML Engineer, Founding Engineer at Gavigo, CTO at Sanicle. UN CSW 69 speaker. 30+ live projects.
Chair of AI Forum NZ. Associate Professor of AI at AUT. Founder of SheSharp. UNESCO Commissioner (2026).
PMP-certified Product Manager. 6+ years in AI/digital products. B2B SaaS, cross-functional leadership.
Programme Lead, *Leading Change for Good* at academyEX. SheSharp Ambassador. Research scientist turned educator.
## RCSA Guest Speakers
Three recruitment leaders joined the March session to share insights into the 2026 tech hiring landscape, current trends, and what employers are looking for.
### Abe Naus
Abe Naus is General Manager of Potentia. He works as the Kaitiaki for the Auckland business — driving the growth, success and cultural alignment of the Auckland consulting teams, ensuring they are building the right future-proofed business. An experienced IT, Projects and Change recruiter with 16+ years in recruitment, his team's areas of expertise include Project Services, DevOps, Big Data & Analytics, Architects, Developers, Test Analysts, Business Analysts, AI, and Agile-skilled individuals.
Connect with Abe
### Paul Kelly
Paul Kelly is Business Manager for Auckland at Randstad Digital, bringing over a decade of experience in recruitment — particularly within the banking, finance, insurance, and government industries. He is passionate about connecting top talent with leading organisations and has a proven ability to build strong relationships with both clients and candidates.
Connect with Paul
### Neekee Reshamwala
As Business Manager for Auckland at Randstad Digital, Neekee is responsible for driving growth and overseeing daily operations, delivering exceptional results for clients and candidates. Before joining Randstad Digital, she held senior leadership roles in the recruitment industry, where she honed her skills in sales, business development and team management. She holds a Master's degree in Business Management from Massey University and has an in-depth understanding of Auckland's job market.
Connect with Neekee
## Facilitator
### Dr. Mahsa McCauley
Founder and Director of SheSharp Charitable Trust. As Chair of AI Forum NZ and Associate Professor of AI at AUT, she serves on boards of NZTech, EdTechNZ and World Summit Awards. Appointed Communication and Information Commissioner for NZ National Commission for UNESCO in January 2026.
## Prerequisites
* No prior tech experience required
* **You must bring your own laptop** to fully participate in the hands-on activity
* Come ready to explore and ask questions
## What You Will Learn
* What AI is and how it is being used in workplaces today
* How AI is influencing job opportunities and recruitment trends
* The skills that matter most in the 2026 tech job market
* How to use practical AI tools in your job search
* What employers and recruiters are looking for right now
## Photo Gallery
Browse highlights from the AI & The Future of Work session.
## Next Session
The March 25 session has concluded. The next HER WAKA cohort focuses on cybersecurity careers and is by invitation only.
This workshop is hands-on and interactive. See the [hands-on exercises](/workshop/march-2026/hands-on-exercises) for details on what was built during the session.
# Workshop Resources
Source: https://herwaka.shesharp.org.nz/workshop/march-2026/resources
Links to AI tools, job search platforms, RCSA resources, speaker information, and recommended reading.
A collection of resources from the March 2026 AI & The Future of Work workshop. Bookmark this page to revisit links and materials after the session.
## AI Tools
| Tool | Description | Link |
| --------- | ------------------------------------------------------ | ------------------------------------------ |
| ChatGPT | AI writing and research assistant by OpenAI | [chat.openai.com](https://chat.openai.com) |
| Claude | AI assistant by Anthropic | [claude.ai](https://claude.ai) |
| Grammarly | AI-powered writing and grammar tool | [grammarly.com](https://www.grammarly.com) |
| Canva | Design tool with AI features for CVs and presentations | [canva.com](https://www.canva.com) |
## Job Search Platforms
| Platform | Link |
| ------------- | -------------------------------------------------------- |
| Seek NZ | [seek.co.nz](https://www.seek.co.nz) |
| Indeed NZ | [nz.indeed.com](https://nz.indeed.com) |
| LinkedIn | [linkedin.com](https://www.linkedin.com) |
| Trade Me Jobs | [trademe.co.nz/a/jobs](https://www.trademe.co.nz/a/jobs) |
## Recommended Reading
* [The Future of Work — MBIE](https://www.mbie.govt.nz/business-and-employment/employment-and-skills/future-of-work/) — New Zealand government insights on how work is changing
* [AI Forum New Zealand](https://aiforum.org.nz) — Research and resources on AI in Aotearoa
## RCSA Resources
The Recruitment, Consulting and Staffing Association (RCSA) provides guidance on working with recruiters effectively and understanding the hiring landscape:
* [RCSA Website](https://www.rcsa.com.au) — Industry resources and standards
* Insights from RCSA on the 2026 tech job market were presented during the March session
## Speaker Profiles
### Panel Speakers
**Chan Meng** — Panel Speaker · Workshop Instructor · Website Developer. Senior AI/ML Infrastructure and Full-Stack Engineer. Founding Engineer at Gavigo and CTO at Sanicle. Former ByteDance developer. Open-source contributor to CopilotKit and Anthropic MCP Servers. Speaker at UN CSW 69. Master's in Applied Computing (Distinction, Dean's List). 25+ professional certifications. [Portfolio](https://chanmeng.org/) · [LinkedIn](https://www.linkedin.com/in/chanmeng666/) · [GitHub](https://github.com/ChanMeng666) · [Medium](https://chanmeng666.medium.com/)
**Dr. Mahsa McCauley** — Chair of AI Forum New Zealand. Associate Professor of AI at Auckland University of Technology and Fulbright Scholar. Founder and Director of SheSharp Charitable Trust. UNESCO Communication and Information Commissioner for New Zealand (2026). [Learn more](https://www.linkedin.com/in/mahsamccauley/)
**Nikita Kumari** — PMP-certified Product and Project Manager with 6+ years delivering AI and digital products in B2B SaaS. Background in Python development, now based in Auckland leading cross-functional teams in product, tech, and AI. [Learn more](https://www.linkedin.com/in/nikitakumari/)
**Meeta** — Speaker details coming soon.
### Guest Speaker
**RCSA representative** — Sharing insights into the 2026 tech hiring landscape and what employers are looking for.
## Event Registration
* [March 25 — Register on Humanitix](https://events.humanitix.com/she-sharp-ministry-of-social-development-academyex-her-waka)
## Slide Downloads
Presentation slides will be made available here after the workshop session.
# Cybersecurity Workshop
Source: https://herwaka.shesharp.org.nz/workshop/may-2026/overview
May 2026 HER WAKA session — three lightning talks on cybersecurity careers and a 45-minute RCSA recruiter networking activity.
**Session 3 — Tuesday 5 May 2026 | 12:00 pm – 2:00 pm**
**academyEX, 99 Khyber Pass Road, Grafton, Auckland 1023**
**This event is strictly by invitation only.**
The third cohort of the HER WAKA series continues with a session focused on **cybersecurity**. Participants will hear from three industry experts through short lightning talks, each sharing a unique perspective and experience in the cybersecurity space. This is an opportunity to gain a broader understanding of the field, the different pathways into it, and the real-world challenges and opportunities it presents.
In the second half of the session, participants will take part in a **45-minute recruiter networking activity** with RCSA representatives. There will be 2–3 tables set up where small groups can connect directly with recruiters, ask questions, and practise real-world conversations in a supportive environment.
## What to Expect
* Three **cybersecurity lightning talks** from senior professionals — including business analysis, AI/cyber consultancy, and agile transformation perspectives
* A **45-minute RCSA recruiter networking activity** — small-group rotations with multiple recruiters
* A grounded view of cybersecurity career pathways and the in-demand skills shaping safer digital workplaces
## Event Schedule
| Time | Duration | Activity |
| ------------------- | -------- | ---------------------------------- |
| 11:30 am – 12:00 pm | 30 min | Registration and afternoon tea |
| 12:00 pm – 12:10 pm | 10 min | Welcome and kick off |
| 12:10 pm – 1:00 pm | 50 min | Cybersecurity lightning talks (×3) |
| 1:00 pm – 1:10 pm | 10 min | Break and group photo |
| 1:10 pm – 1:55 pm | 45 min | RCSA recruiter networking activity |
| 1:55 pm – 2:00 pm | 5 min | Closing |
## Lightning Talk Speakers
### Prasanth Pavithran
Prasanth Pavithran works at the intersection of business architecture, transformation, people, and technology. With an MBA and over two decades of global experience, he serves as Senior Business Analyst in the Office of the CTO at Auckland University of Technology, mapping the relationships between strategy, capability, process, and technology. Before AUT he led a business analysis team at healthAlliance and spent nearly a decade at HCL Technologies delivering large-scale SAP programmes. He has been mentoring with SheSharp since 2017.
Connect with Prasanth
### Paula Gair
Paula Gair advises, teaches and assesses Master's students at Tech Futures Lab on multiple aspects of emerging and disruptive technology — including AI, cybersecurity, privacy, and embedding Security and Privacy by Design. As founder of **deriskme**, she works with families, SMEs, schools and businesses on practical cyber security, online safety, and privacy. A frequent speaker and commentator on privacy, cyber security, online safety and emerging technology, Paula advocates for safer defaults and nudges that improve outcomes for everyone, and is passionate about seeing more girls study STEAM and more women found tech companies.
Connect with Paula
### Swapna Soni
Swapna Soni is a Transformation Strategist with 8+ years of experience designing and delivering enterprise-wide change across public and private sectors in New Zealand. She currently serves as Agility Coach at NZ Post, with prior roles at Air New Zealand, Vodafone, and the Ministry of Social Development. Her work spans value-stream-led delivery models, agility-maturity uplift and ADKAR-based change strategies. Swapna brings curiosity, structure and care to help organisations reimagine their operating models and deliver change that sticks.
Connect with Swapna
Senior Business Analyst, Office of the CTO at AUT. MBA, 20+ years global experience. SheSharp mentor since 2017.
Founder of deriskme. Educator at Tech Futures Lab. AI, cybersecurity, privacy and online safety advisor.
Agility Coach at NZ Post. Transformation Strategist with 8+ years across NZ public and private sectors.
### RCSA Recruiters
Multiple **RCSA recruiters** join the second half for a 45-minute networking activity, sharing insights into the current job market and offering practical guidance for jobseekers.
## Prerequisites
* This event is **strictly by invitation only**
* No prior tech experience required
* Come ready to learn and ask questions
## What You Will Learn
* The diverse pathways into cybersecurity careers
* How AI, privacy and security intersect in modern workplaces
* How transformation and agility shape large-scale change
* How to make the most of a short conversation with a recruiter
## Register
This event is strictly by invitation only. If you have received an invitation, please RSVP via Humanitix.
If you are an MSD client and would like to know about future HER WAKA cohorts, please contact your case manager or visit the [SheSharp website](https://www.shesharp.org.nz).
# HER WAKA Workshops
Source: https://herwaka.shesharp.org.nz/workshop/overview
All HER WAKA workshop sessions — from AI and future of work to networking and career connections.
HER WAKA runs four in-person workshop sessions from March to June 2026 at academyEX Pikopiko, Auckland. Each session focuses on a different aspect of career development in the tech industry.
**Wednesday 25 March 2026** · 12–2 pm *(Concluded)*
AI panel discussion, hands-on AI workshop, and RCSA tech hiring insights.
**Tuesday 7 April 2026** · 12–2 pm *(Concluded)*
Celebrate your achievements with #IAmRemarkable, build your own website with Vibe Coding, and get RCSA job market insights.
**Tuesday 5 May 2026** · 12–2 pm *(Invitation only)*
Three lightning talks on cybersecurity careers and a 45-minute RCSA recruiter networking activity.
**Tuesday 2 June 2026** · 12–2 pm
Treat your career like a Go-To-Market strategy — building visibility, credibility, and networks with Andrea Halal.
All sessions are held at **academyEX Pikopiko, Auckland** and run from **12:00 pm to 2:00 pm**. Each session welcomes up to 25 participants.