Skip to content

Commit aa1e5fc

Browse files
committed
fix: Resolve repeating Joyride tour on mobile and release v0.21.11
1 parent c4fd486 commit aa1e5fc

File tree

22 files changed

+417
-56
lines changed

22 files changed

+417
-56
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
✅ What to Do Next
2+
1. Create a “Post-Booking Thank You” Page
3+
URL Example:
4+
/thank-you-job
5+
/thank-you-consulting
6+
7+
2. Suggested Content for /thank-you-job
8+
Headline:
9+
10+
👋 Thanks for booking a time to chat!
11+
12+
Subheadline:
13+
14+
While you’re here, here are a few resources that’ll give you a deeper sense of my work and what I bring to a team.
15+
16+
Content Blocks (3-card layout):
17+
18+
💡 Portfolio Homepage – davidmieloch.com
19+
20+
🎨 Photoshop in the Browser – Shows frontend depth and system design
21+
22+
🧠 Brain Garden – If the role touches AI or internal tools
23+
24+
Brilliant question — and this is where your **content marketing instincts** and **AI-native positioning** intersect.
25+
26+
---
27+
28+
## 🧠 Should You Repeat Content? Yes — Strategically.
29+
30+
| Concern | Reality |
31+
|--------|---------|
32+
| "I don't want to burn my best stuff early." | Repetition is fine. Most people only click one thing — the rest is reinforcement. |
33+
| "What if I want to send this blog later?" | You still can. **Context + timing** make repeat content feel fresh. |
34+
| "Won’t they see it twice?" | If they do, it reinforces credibility and consistency, not fatigue. |
35+
| "Should I link my site or a blog post?" | Depends on the event intent (job lead vs. consulting vs. press).
36+
37+
---
38+
39+
## 🔥 Best Practice for You
40+
41+
### 🔹 **Job Booking → Redirect to “Start Here” page on your site**
42+
Let this act like a “curated landing zone” — not a blog post, not just your homepage. It should say:
43+
44+
> ✅ “Thanks for booking”
45+
> ✅ “Here’s how to get the most out of our call”
46+
> ✅ “Here’s a quick tour of my work” (with 1–3 hand-picked links)
47+
48+
Those links **can include** your blog posts, but you’re not “burning” them — you’re surfacing them **contextually** as pre-call prep.
49+
50+
You can still drip those same posts later in email follow-ups with new framing:
51+
- "Since we discussed internal tooling, here’s a post about how I approached it at Scala"
52+
- "We touched on AI systems briefly — here's a deeper dive on my Brain Garden approach"
53+
54+
---
55+
56+
## ✅ Recommendation:
57+
58+
- Build a dedicated **`/thank-you-job` page** now (I’ll help write it)
59+
- Redirect Calendly there
60+
- Include **3 assets max** (site, 1 blog, 1 project/case study)
61+
- Leave room to drip them again later — with story-driven framing

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@
1919
"ignorePattern": [".brain/**/*.md", ".cursorrules"]
2020
},
2121
"editor.formatOnSave": true,
22-
"editor.defaultFormatter": "esbenp.prettier-vscode"
22+
"editor.defaultFormatter": "esbenp.prettier-vscode",
23+
"dotenv.enableAutocloaking": false
2324
}

CHANGELOG.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## [Unreleased]
99

1010
### Added
11+
12+
### Changed
13+
14+
### Deprecated
15+
16+
### Removed
17+
18+
### Fixed
19+
20+
### Security
21+
22+
## [0.21.11] - 2025-04-30
23+
24+
### Added
25+
- Implemented new landing page design and functionality.
1126
- Created InputContainer component with tabbed interface to switch between file upload and text input [#Feature] [#UI]
1227
- Created UI components for Perfect Fit Analyzer following Storybook-First approach (FileDropzone and JobDescriptionTextInput) [#Feature] [#UI]
1328
- Created OpenAI API integration for Perfect Fit Analyzer with rate limiting and response formatting [#Feature]
@@ -30,6 +45,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3045
- Fixed infinite render loop in WhitePaper components (AiSkepticToExpert and CoreComponentsSection) by removing console.log statements and optimizing renders [#BugFix] [#Performance]
3146
- Fixed ducked audio functionality so that music automatically switches to quieter ducked versions when voice narration is playing [#BugFix] [#UX]
3247
- Fixed TypeScript errors related to null checks for pathname from Next.js usePathname() hook [#BugFix] [#TypeSafety]
48+
- Fixed Joyride tour repeating on mobile due to incorrect localStorage key usage in `JoyrideProvider`.
3349

3450
### Improved
3551

@@ -179,4 +195,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
179195
- Created reusable `AnimatedSection` component to reduce duplication
180196
- Removed debugging console logs
181197
- Simplified icon processing logic
182-
- Improved overall component structure
198+
- Improved overall component structure
199+
200+
### Deprecated
201+
202+
### Removed
203+
204+
### Security

app/thank-you-job/page.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
'use client';
2+
3+
import React, { Suspense } from 'react';
4+
import dynamic from 'next/dynamic';
5+
import { PageWrapper } from '@shared-components/templates/PageWrapper';
6+
7+
// Dynamic import of BestPractices
8+
const ThankYouJob = dynamic(
9+
() => import('@/shared-components/pages/ThankYouJob').then((mod) => mod.ThankYouJob),
10+
{
11+
loading: () => null,
12+
ssr: false
13+
}
14+
);
15+
16+
// Add a console log to see if this file is being used
17+
console.log('Loading thank-you-job page');
18+
19+
const ThankYouJobPage = () => {
20+
return (
21+
<PageWrapper>
22+
<Suspense fallback={null}>
23+
<ThankYouJob />
24+
</Suspense>
25+
</PageWrapper>
26+
);
27+
};
28+
29+
export default ThankYouJobPage;

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "david-portfolio",
3-
"version": "0.21.10",
3+
"version": "0.21.11",
44
"private": true,
55
"scripts": {
66
"dev": "next dev -p 3001",
@@ -45,7 +45,7 @@
4545
"@mantine/dates": "^7.17.1",
4646
"@mantine/dropzone": "^7.17.3",
4747
"@mantine/form": "^7.17.1",
48-
"@mantine/hooks": "^7.17.1",
48+
"@mantine/hooks": "^7.17.5",
4949
"@mantine/notifications": "^7.17.5",
5050
"@microsoft/clarity": "^1.0.0",
5151
"@react-spring/animated": "9.5.5",

pnpm-lock.yaml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
885 KB
Binary file not shown.
1.54 MB
Loading

public/home-screenshot-3:2.png

309 KB
Loading

src/components/Diagrams/BrainGardenComponentsDiagram/BrainGardenComponentsDiagram.types.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export type NodeType = 'mainComponent' | 'subComponent' | 'system';
77
/**
88
* Custom node data interface with index signature
99
*/
10-
export interface CustomNodeData extends Record<string, unknown> {
10+
export interface CustomNodeData extends Record<string, unknown> {
1111
label: string;
1212
icon?: string;
1313
style?: React.CSSProperties;
@@ -36,25 +36,25 @@ export interface BrainGardenComponentsDiagramProps {
3636
* Optional CSS class name for styling the container
3737
*/
3838
className?: string;
39-
39+
4040
/**
4141
* Optional theme for the diagram
4242
* @default 'default'
4343
*/
4444
theme?: 'default' | 'dark' | 'forest' | 'neutral';
45-
45+
4646
/**
4747
* Optional width for the diagram container
4848
* @default '100%'
4949
*/
5050
width?: string | number;
51-
51+
5252
/**
5353
* Optional height for the diagram container
5454
* @default '600px'
5555
*/
5656
height?: string | number;
57-
57+
5858
/**
5959
* Optional background color for the diagram container
6060
*/
@@ -77,7 +77,7 @@ export interface BrainGardenComponentsDiagramProps {
7777
* @default 'Brain Garden Core Components Diagram showing Knowledge System, Prompt System, and Structured Documentation'
7878
*/
7979
accessibilityDescription?: string;
80-
80+
8181
/**
8282
* Optional title for the diagram
8383
* @default 'Brain Garden Core Components'
@@ -98,7 +98,7 @@ export interface BrainGardenComponentsDiagramProps {
9898
/**
9999
* Custom edges for the diagram
100100
*/
101-
customEdges?: Array<{id: string, source: string, target: string, style?: CSSProperties}>;
101+
customEdges?: Array<{ id: string, source: string, target: string, style?: CSSProperties }>;
102102

103103
/**
104104
* Callback function when a node is clicked
@@ -122,7 +122,7 @@ export interface BrainGardenComponentsDiagramProps {
122122
* @default 'shift'
123123
*/
124124
selectionKeys?: string[];
125-
125+
126126
/**
127127
* Whether the diagram is in edge creation mode, allowing nodes to be connected
128128
* @default false
@@ -133,7 +133,7 @@ export interface BrainGardenComponentsDiagramProps {
133133
/**
134134
* Internal props for the DiagramFlow component
135135
*/
136-
export interface DiagramFlowProps extends BrainGardenComponentsDiagramProps {}
136+
export interface DiagramFlowProps extends BrainGardenComponentsDiagramProps { }
137137

138138
/**
139139
* Theme style configuration
@@ -142,3 +142,5 @@ export interface ThemeStyles {
142142
backgroundColor?: string;
143143
color?: string;
144144
}
145+
146+
export interface FlowState extends Record<string, unknown> { }

0 commit comments

Comments
 (0)