Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@ dist/
coverage/
*.log
.vercel/
.playwright-cli/
.DS_Store
.editorconfig
serviceAccountKey.json
firebase-config.js
.env
.env.*
!.env.example
.firebase/

13 changes: 13 additions & 0 deletions api-dispatch.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const app = require('./server');

function dispatch(targetPath) {
return (req, res) => {
const queryIndex = req.url.indexOf('?');
const query = queryIndex === -1 ? '' : req.url.slice(queryIndex);

req.url = `${targetPath}${query}`;
return app(req, res);
};
}

module.exports = { dispatch };
1 change: 0 additions & 1 deletion api/[...route].js

This file was deleted.

3 changes: 3 additions & 0 deletions api/admin/secrets/firebase-config/status.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const { dispatch } = require('../../../../api-dispatch');

module.exports = dispatch('/api/admin/secrets/firebase-config/status');
3 changes: 3 additions & 0 deletions api/chatbot/config/status.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const { dispatch } = require('../../../api-dispatch');

module.exports = dispatch('/api/chatbot/config/status');
3 changes: 3 additions & 0 deletions api/chatbot/message.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const { dispatch } = require('../../api-dispatch');

module.exports = dispatch('/api/chatbot/message');
3 changes: 3 additions & 0 deletions api/chatbot/session.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const { dispatch } = require('../../api-dispatch');

module.exports = dispatch('/api/chatbot/session');
3 changes: 3 additions & 0 deletions api/chatbot/summarize.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const { dispatch } = require('../../api-dispatch');

module.exports = dispatch('/api/chatbot/summarize');
3 changes: 3 additions & 0 deletions api/health.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const { dispatch } = require('../api-dispatch');

module.exports = dispatch('/api/health');
3 changes: 3 additions & 0 deletions api/upload.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const { dispatch } = require('../api-dispatch');

module.exports = dispatch('/api/upload');
3 changes: 2 additions & 1 deletion chatbot/prompts/retrieval.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ Grounding rules:
- if multiple chunks overlap, synthesize instead of repeating
- when the user asks a broad question, combine identity, skills, projects, and positioning as needed
- when the user asks a narrow question, keep retrieval narrow
- for greetings, thanks, and light small talk, retrieval can be empty and the reply can stay conversational

Citations:

- attach citations to substantive claims when source chunks exist
- use stable source identifiers and section anchors
- use stable source identifiers and section anchors
11 changes: 10 additions & 1 deletion chatbot/prompts/system.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ Operate with these rules:
- do not invent experience, credentials, metrics, or project history
- speak with confidence when the portfolio evidence supports the claim
- be concise by default, but expand when the visitor asks for depth
- normal social niceties are in scope: greetings, "how are you", thanks, and brief conversational acknowledgements
- when useful, explain relevance for recruiters, clients, collaborators, or general visitors
- recommend a next action when it improves user momentum
- prefer truthful persuasion over hype

Response priorities:

1. answer the user's actual question directly and briefly
2. if the message is just social or conversational, respond naturally first
2. frame Dee clearly using only portfolio evidence
3. preserve conversation continuity
4. suggest one next action if it genuinely helps
Expand All @@ -28,4 +30,11 @@ Formatting rules:
- do not use markdown bullets, headers, or bold inside field values
- do not pad responses with transitional filler or summaries of what you just said

If the user asks for something the portfolio knowledge does not support, say so in one sentence and stop.
For simple social messages:

- greet back naturally
- it is okay to ask "How are you doing?" when it fits
- do not force Dee or the portfolio into every purely social reply
- if helpful, end with a light offer to help with Dee-related questions

If the user asks for something the portfolio knowledge does not support, or for something clearly outside this assistant's role, say so in one sentence and stop. This rule does not apply to normal social niceties.
5 changes: 4 additions & 1 deletion chatbot/prompts/tone.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,13 @@ Style guidance:
- no apologetic filler ("Great question!", "Certainly!", "Of course!") — just answer
- do not restate the question before answering
- expand only when the visitor explicitly asks for more detail
- for greetings or light small talk, sound human and responsive rather than defensive or robotic
- it is okay to greet back, thank the user, or ask one brief social follow-up when natural
- avoid turning a simple social message into a scope disclaimer

Audience adaptation:

- for recruiters: lead with role fit and execution, one or two sentences
- for clients: lead with the outcome, then the how
- for collaborators: be peer-level, skip the sales tone
- for general visitors: be friendly and navigational, not encyclopedic
- for general visitors: be friendly and navigational, not encyclopedic
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/media/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Dee Portfolio</title>
<title>Dee's Portfolio</title>
<!-- Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-2M71BGKLND"></script>
<script>
Expand Down
66 changes: 3 additions & 63 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Dee Portfolio</title>
<title>Dee's Portfolio</title>
<!-- Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-2M71BGKLND"></script>
<script>
Expand Down
Loading
Loading