RonBot is a website-grounded AI assistant designed to help visitors explore my professional experience, skills, education, certifications and technical projects through natural conversation.
π Portfolio β’ ποΈ Architecture β’ π¬ Personality β’ π€ Character Design
- β Website-grounded knowledge ingestion
- β Local retrieval and relevance scoring
- β Grounded answers with safe fallback behaviour
- β Recruiter and technical answer depth
- β AWS Lambda serverless backend
- β Amazon API Gateway HTTP API
- β Browser-to-AWS RonBot integration
- β Amazon Bedrock AI model integration
- β Amazon Nova Micro grounded response generation
- πΊοΈ Managed AWS knowledge architecture planned
π Retrieval: Searches structured knowledge extracted from the portfolio website
π¬ Grounded Answers: Responds using retrieved website evidence rather than unrestricted knowledge
π§ AI Responses: Uses Amazon Nova Micro through Amazon Bedrock to generate natural-language answers from retrieved website evidence
π§© Multi-Chunk Evidence: Combines relevant information when an answer spans multiple knowledge chunks
π‘οΈ Safe Fallback: Unsupported questions are not guessed and direct visitors to the Contact page
π€ Interaction: Animated Robot Ron frontend with purposeful thinking states
βΏ Accessibility: Supports prefers-reduced-motion
RonBot is deliberately restricted to approved portfolio content.
If it's on Ron's website, I can talk about it. If it isn't, I don't make it up.
Website evidence available β Grounded answer
Insufficient evidence β Contact Ron fallback
This boundary is a core design requirement, not simply a conversational preference.
RonBot currently uses a hybrid architecture combining website-grounded retrieval with a deployed AWS serverless API layer.
The browser sends questions to Amazon API Gateway, which invokes the RonBot AWS Lambda function. Lambda uses the Python retrieval and scoring layer to select relevant evidence from the approved website knowledge base. Retrieved evidence is supplied to Amazon Nova Micro through Amazon Bedrock to generate a natural-language response while preserving RonBotβs website-only grounding rules, deterministic safeguards and Contact-page fallback.
Portfolio Website
β
βΌ
RonBot Browser Interface
β
βΌ
Amazon API Gateway
β
βΌ
AWS Lambda
β
βββ Python Retrieval & Scoring
β
βββ Deterministic Grounding & Safeguards
β
βΌ
Retrieved Website Evidence
β
βΌ
Amazon Bedrock
β
βΌ
Amazon Nova Micro
β
βΌ
Grounded AI Response
β
βΌ
RonBot Browser Interface
HYBRID ARCHITECTURE β AWS API AND BEDROCK AI LAYERS DEPLOYED; MANAGED KNOWLEDGE COMPONENTS PLANNED
The AWS serverless API and AI layers are now deployed and operational using Amazon API Gateway, AWS Lambda and Amazon Bedrock with Amazon Nova Micro.
RonBot currently retrieves relevant evidence from its structured website knowledge base before supplying that evidence to Nova Micro for grounded natural-language response generation.
Future architecture work may introduce managed AWS services for knowledge storage and retrieval while preserving RonBot's website-only knowledge boundary.
Frontend: Portfolio Website β API Gateway
Compute: API Gateway β AWS Lambda
AI: Lambda β Amazon Bedrock
Knowledge: Bedrock Knowledge Base β Amazon S3 / S3 Vectors
Guardrail: Portfolio-grounded answers remain the core requirement
π΅ Current status: AWS API Gateway, Lambda and Amazon Bedrock with Nova Micro deployed; managed AWS knowledge components remain planned.
View the detailed architecture decision β
- Python β retrieval, scoring, grounded answer logic and Lambda backend
- HTML / CSS / JavaScript β RonBot browser interface
- Amazon API Gateway β public HTTP API for RonBot requests
- AWS Lambda β serverless RonBot backend
- Amazon CloudWatch β application logging and operational visibility
- JSONL β website knowledge base
- GitHub β source control and project documentation
- Amazon Bedrock β AI model integration for grounded natural-language responses
- Managed AWS knowledge services β future retrieval/RAG architecture where appropriate
- Additional AWS monitoring and security controls β as the AI architecture evolves
RonBot is being built incrementally, with each stage adding and validating a specific part of the system.
π€ RON-04 β Character Design
Created the production Robot Ron identity used throughout the portfolio experience.
π¬ RON-05 β Local Chat Interface
Built the working HTML, CSS and JavaScript conversational interface.
β¨ RON-06 β Animation & Interaction
Added purposeful interaction states, thinking feedback and reduced-motion accessibility.
π RON-07 β Website Knowledge Ingestion
Built the website crawler and ingestion pipeline, converting approved portfolio content into structured, traceable knowledge chunks for retrieval.
π RON-08 β Local Retrieval
Prepared and validated the local knowledge retrieval pipeline used to find relevant website evidence.
π‘οΈ RON-09 β Grounded Answers & Fallback
Improved query matching, multi-chunk evidence handling and safe unknown-answer behaviour.
π§ RON-10 β Recruiter & Technical Answer Depth Added adaptive answer depth so general visitors receive concise portfolio answers while technical questions can surface deeper website-grounded implementation detail.
π RON-11 β RonBot API & Frontend Integration
Deployed the RonBot backend to AWS Lambda, exposed it through an Amazon API Gateway HTTP API using POST /ask, connected the browser frontend to the live endpoint, configured CORS, and validated grounded responses, fallback behaviour and frontend error handling.
Hardened the deployed AWS backend for production-readiness:
- Added structured Lambda application logging.
- Added AWS request IDs and request-duration measurements.
- Added safe
400and500API error handling. - Added configurable
LOG_LEVELenvironment configuration. - Verified CloudWatch visibility without logging visitor questions or answers.
- Reviewed Lambda IAM permissions for least-privilege execution.
- Validated memory, timeout and cold/warm execution performance.
- Completed live API regression testing for supported, unsupported and malformed requests.
Integrated Amazon Nova Micro through Amazon Bedrock into RonBot's production response path:
- Validated Amazon Nova Micro in
eu-west-2using the Bedrock Converse API. - Integrated Bedrock locally with the existing website-grounded retrieval pipeline.
- Supplied retrieved website evidence to Nova Micro rather than unrestricted portfolio questions.
- Strengthened grounding instructions to prevent unsupported inference and cross-role fact mixing.
- Preserved deterministic answer branches and the Contact-page fallback.
- Added targeted retrieval weighting for key technical terms such as AWS.
- Deployed the Bedrock integration to AWS Lambda.
- Added least-privilege
bedrock:InvokeModelpermission for Nova Micro. - Validated grounded responses through the production AWS path.
RON-13 moves RonBot from deterministic grounded retrieval into AI-generated responses while preserving the website as the canonical knowledge source.
11 / 11 representative questions passed
Testing includes both supported questions and deliberately unsupported questions to verify that RonBot does not invent information.
Building RonBot's local ingestion and retrieval environment involved troubleshooting several real development issues:
- Python environment β diagnosed a broken
.venvwith invalid Python symlinks - Homebrew β repaired the local Python installation and recreated the virtual environment
- Dependencies β standardised installation using
python3 -m pip - Character encoding β resolved website ingestion issues using detected response encoding
- Python syntax β identified and corrected indentation and mixed whitespace errors
- Repeatability β established a clean, reproducible local development environment
RonBot v1 β Website-Grounded Assistant
β
RON-02 β Architecture
β
RON-03 β Personality & response design
β
RON-04 β Production character
β
RON-05 β Local chat interface
β
RON-06 β Animation & interaction
β
RON-07 β Website knowledge ingestion
β
RON-08 β Local knowledge retrieval
β
RON-09 β Grounded answers & safe fallback
β
RON-10 β Recruiter & technical answer depth
β
RON-11 β RonBot API and frontend integration
β
RON-12 β Serverless Backend Hardening & Observability
β
RON-13 β AI Model Integration
Current milestone: Amazon Nova Micro integrated through Amazon Bedrock into the production RonBot response path, using retrieved website evidence for grounded AI-generated answers while preserving deterministic safeguards and safe fallback behaviour.
β‘οΈ Next: RON-14 β Conversation Context.
RON-01 established the core requirements and safety boundary for RonBot.
Implemented decisions include:
- Defined RonBot as a portfolio assistant grounded only in information published on Ron's website.
- Prevented unsupported external searches or assumptions about Ron.
- Established the Contact page as the fallback when the website does not contain enough information to answer a question.
- Defined privacy and grounding as core design requirements rather than later additions.
RON-01 established the rules that all subsequent RonBot retrieval, answering and guardrail behaviour follows.
RON-02 defined the initial technical architecture for the RonBot platform.
Implemented decisions include:
- Defined the separation between the browser interface, backend processing, website knowledge and future AI services.
- Selected a lightweight serverless AWS direction to keep the portfolio project practical and cost-conscious.
- Documented the current and planned architecture so the implementation could evolve incrementally.
- Established Python as the core backend language.
RON-02 provided the technical blueprint used throughout the subsequent RonBot development.
RON-03 defined how RonBot should communicate with portfolio visitors.
Implemented improvements include:
- Created a friendly and professional response style suitable for recruiters, hiring managers and technical visitors.
- Established concise answers as the default while allowing additional technical depth where appropriate.
- Defined behaviour for questions that cannot be answered from the website.
- Preserved the website-only knowledge boundary within the conversational design.
RON-03 established a consistent RonBot personality without weakening the project's grounding requirements.
RON-04 created and approved the visual identity used for RonBot.
Implemented improvements include:
- Developed the production Robot Ron character for the portfolio.
- Incorporated visual references to AWS, Redpanda, Azure and Google technologies.
- Included study material as part of the character design to reflect ongoing learning and certification development.
- Established the character as the visual identity for the RonBot chat experience.
RON-04 gave the technical assistant a consistent visual identity suitable for integration into the portfolio.
RON-05 established the first working browser-based RonBot chat experience.
Implemented improvements include:
- Built the local RonBot chat interface using HTML, CSS and JavaScript.
- Added user and bot message presentation.
- Created the initial interaction flow for submitting questions and displaying responses.
- Established the frontend structure later used for the live AWS API integration.
RON-05 provided the working frontend foundation for subsequent interaction and backend development.
RON-06 improved the RonBot frontend from a static interface into an interactive portfolio feature.
Implemented improvements include:
- Added the floating RonBot launcher and open/close behaviour.
- Added hover and interaction feedback.
- Added purposeful thinking behaviour and an animated thinking indicator.
- Improved message spacing and general chat presentation.
- Added reduced-motion accessibility support.
RON-06 established the interaction model used by the current RonBot browser interface.
RON-07 created the pipeline used to turn the live portfolio website into structured RonBot knowledge.
Implemented improvements include:
- Built the Python website ingestion process.
- Crawled the portfolio while restricting ingestion to the approved website domain.
- Converted website content into structured and traceable knowledge chunks.
- Added chunking, overlap and URL canonicalisation.
- Generated the website knowledge dataset used by the retrieval pipeline.
RON-07 established the website itself as RonBot's canonical knowledge source.
RON-08 implemented the retrieval layer used to find relevant website information for a visitor's question.
Implemented improvements include:
- Built local Python retrieval over the generated website knowledge.
- Added tokenisation, stop-word handling and relevance scoring.
- Added query expansion to improve matching between natural-language questions and website content.
- Introduced a minimum relevance threshold to reduce weak or unrelated answers.
- Preserved traceability back to the source website content.
RON-08 provided the retrieval foundation used by RonBot's grounded answer logic.
RON-09 connected retrieval to conversational answer generation while enforcing the website-only knowledge boundary.
Implemented improvements include:
- Added grounded answers based on retrieved website content.
- Improved query matching and multi-chunk evidence handling.
- Added explicit guardrails for known unsupported questions.
- Implemented safe fallback behaviour directing visitors to the Contact page when sufficient evidence is unavailable.
- Tested supported and deliberately unsupported questions to ensure RonBot does not invent information.
RON-09 established the grounded-answer and hallucination-prevention behaviour preserved by later milestones.
RON-10 introduced adaptive answer depth so RonBot can provide concise responses for general visitors while allowing technically focused visitors to ask for deeper implementation detail.
Implemented improvements include:
- Added concise, recruiter-friendly responses for general RonBot questions.
- Added technical-depth detection for questions about architecture, implementation, retrieval, grounding, ingestion and the knowledge source.
- Improved retrieval so RonBot implementation questions favour the dedicated Project 02 content rather than unrelated Work Experience content.
- Resolved ambiguity around phrases such as "How does RonBot work?", where "work" could previously be interpreted as employment history.
- Preserved website-only grounding and the Contact-page fallback for unsupported questions.
- Standardised
knowledge/website.jsonlas the canonical generated website knowledge file used by the retrieval pipeline.
Example behaviour:
- "What is RonBot?" β concise portfolio-focused explanation.
- "How does RonBot work?" β deeper explanation of website ingestion, structured knowledge, Python retrieval, grounded answering and fallback behaviour.
RON-10 was acceptance-tested against general, technical-depth and unsupported questions, with the existing grounding and fallback behaviour preserved.
RON-11 moved RonBot from a local-only prototype to a working AWS-hosted API connected to the browser chat interface.
The work was completed in two stages:
- RON-11A β API Build: Created the Lambda handler, packaged the existing retrieval and grounded-answer logic for AWS Lambda, deployed the function in
eu-west-2, and exposed it through an Amazon API Gateway HTTP API usingPOST /ask. - RON-11B β Integration & Testing: Connected
frontend/ronbot.jsto the live API, configured CORS for local development and the production portfolio domains, verified guardrails and unsupported-question fallbacks through the browser, tested frontend failure handling, cleaned the deployment package, and reviewed the Lambda configuration and cost exposure.
Current request path:
Browser β API Gateway HTTP API β AWS Lambda β RonBot retrieval and answer logic β website knowledge β browser
RON-11 was acceptance-tested through both direct Lambda invocation and the browser interface. The browser now receives real responses from the AWS-hosted RonBot backend rather than simulated frontend responses.
At the completion of RON-11, RonBot still used deterministic website-grounded retrieval and answer logic. Amazon Bedrock integration was subsequently introduced in RON-13, while the managed knowledge architecture remains future development work.
Status: Complete
RON-12 hardened the working AWS-hosted RonBot backend introduced in RON-11, focusing on operational visibility, safer error handling, configuration management, least-privilege access and production-readiness checks.
- Added structured application logging to the AWS Lambda handler.
- Added request correlation using the AWS Lambda request ID.
- Added request-duration measurements for operational troubleshooting.
- Added
INFOlogging for successful requests. - Added
WARNINGlogging for rejected or malformed requests. - Added safe
500handling for unexpected backend failures. - Avoided logging visitor questions and RonBot answers to reduce unnecessary storage of conversation content.
- Added configurable
LOG_LEVELsupport using an AWS Lambda environment variable, withINFOas the safe default. - Reviewed application configuration and deliberately retained retrieval thresholds and fallback behaviour in version-controlled application code.
- Reviewed the Lambda execution role and confirmed least-privilege CloudWatch Logs permissions.
- Reviewed Lambda runtime configuration and retained 128 MB memory, 512 MB ephemeral storage and a 3-second timeout.
- Verified CloudWatch visibility for successful and rejected requests.
- Performed live API regression testing through Amazon API Gateway.
RON-12 was validated against the live AWS deployment using supported, unsupported and malformed requests.
The production checks confirmed:
- grounded supported questions continue to return successful responses;
- unsupported questions continue to use the safe Contact-page fallback;
- malformed requests return HTTP
400without exposing internal implementation details; - successful requests generate operational
INFOevents in CloudWatch; - malformed requests generate
WARNINGevents with the relevant error type; - visitor question and answer content is not written to application logs;
- the Lambda remained well within its 128 MB memory allocation during testing.
Observed execution remained lightweight, with approximately 40 MB maximum memory usage and warm application processing comfortably below the configured three-second timeout.
The current backend therefore has a tested operational baseline for logging, troubleshooting, configuration, error handling and least-privilege execution before the planned AI model integration work begins.
Status: Complete
RON-13 introduced AI-generated natural-language responses into RonBot while preserving the website-only knowledge boundary established earlier in the project.
The work was completed in three stages:
- RON-13A β Model & Access Validation: Selected Amazon Nova Micro, validated availability in
eu-west-2and successfully tested the model through the Amazon Bedrock Converse API. - RON-13B β Local Grounded Integration: Connected Bedrock to the existing Python retrieval pipeline, supplied retrieved website evidence to the model and strengthened grounding behaviour to prevent unsupported inference and cross-role fact mixing.
- RON-13C β AWS Deployment & Validation: Deployed the integration to AWS Lambda, added least-privilege
bedrock:InvokeModelaccess for Nova Micro and validated grounded responses through the production AWS path.
The production response flow now combines deterministic retrieval and safeguards with AI-generated responses:
Question β Retrieval & Scoring β Website Evidence β Amazon Bedrock β Nova Micro β Grounded Response
The Contact-page fallback remains in place when retrieval cannot find sufficient website evidence.
RON-13 therefore adds generative AI without changing RonBot's fundamental rule: the portfolio website remains the canonical source of truth.
Build and deploy a production-ready conversational assistant grounded exclusively in approved portfolio content.
Current β Website ingestion Β· grounded retrieval Β· AWS Lambda Β· API Gateway Β· Amazon Bedrock Β· Nova Micro Β· grounded AI responses
Next β RON-14 Conversation Context Β· continued RonBot v1 development
Evolve RonBot from question-and-answer into an intelligent interface for exploring the portfolio.
Planned capabilities:
- Recruiter Β· Hiring Manager Β· Engineer visitor experiences
- AI CV exploration
- Contextual project deep-dives
- Interactive architecture explanations
- Semantic portfolio search
- Controlled portfolio navigation and actions
AI remains optional β visitors will always be able to explore the traditional portfolio directly.
Explore the technical documentation and implementation behind RonBot:
ποΈ Architecture: docs/architecture.md
π¬ Personality & behaviour: docs/personality.md
π€ Character design: docs/ronbot-character.md
π Frontend: frontend/
π Backend: backend/
The repository now contains the working frontend, website ingestion and retrieval pipeline, grounded-answer implementation, AWS Lambda handler, and browser integration with the deployed API Gateway HTTP API.
RonBot isn't about adding a chatbot to a website simply because AI is available.
The goal is to build a genuinely useful portfolio experience while developing practical skills in retrieval, grounding, RAG, semantic search, serverless architecture and responsible AI behaviour.
Build it incrementally. Ground it in evidence. Test it before adding complexity.
π Portfolio β’ π€ RonBot Project β’ π€ GitHub Profile β’ βοΈ Website Project

