Skip to content

Commit 5ed029e

Browse files
committed
privacy pleasure and todoist blog
1 parent 0b807ef commit 5ed029e

9 files changed

Lines changed: 823 additions & 26 deletions

File tree

public/feed.xml

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<link>https://pythonessprogrammer.com</link>
66
<description>Thoughts on technology, accessibility, and the human experience.</description>
77
<language>en</language>
8-
<lastBuildDate>Thu, 30 Oct 2025 18:41:52 GMT</lastBuildDate>
8+
<lastBuildDate>Fri, 31 Oct 2025 20:19:41 GMT</lastBuildDate>
99
<atom:link href="https://pythonessprogrammer.com/feed.xml" rel="self" type="application/rss+xml" />
1010

1111
<item>
@@ -91,9 +91,37 @@ You’ll see progress logs as the project, sections, tasks, and sub‑tasks are
9191
9292
## How I’m using it
9393
94-
- **Client onboarding**: One JSON per service offering; instant sections for Planning, Execution, Review.
95-
- **Content sprints**: A lightweight editorial checklist that appears with a single command.
96-
- **Studio maintenance**: Monthly admin projects with recurring cleanup tasks bundled in.
94+
I turn long AI chats into actionable Todoist projects by asking the model for a single JSON payload in the importer’s format. I paste that JSON into `project_data.json` and run the script—done.
95+
96+
### Prompt I use (short and strict)
97+
98+
```text
99+
You are helping me turn our conversation into an actionable Todoist project.
100+
101+
Return ONLY valid JSON in this exact schema (no prose):
102+
{
103+
"project_name": "<short-name>",
104+
"sections": [
105+
{ "name": "<section>", "tasks": [
106+
{ "content": "<task>", "sub_tasks": [ { "content": "<subtask>" } ] }
107+
]}
108+
]
109+
}
110+
111+
Rules:
112+
- Use 3–6 sections that reflect this chat’s themes.
113+
- Each section: 3–7 tasks.
114+
- Use clear, verb-led task names.
115+
- Include sub_tasks only where they reduce ambiguity.
116+
- Do not include comments, markdown, or trailing commas.
117+
```
118+
119+
### Workflow
120+
121+
1. Summarize the chat in my head into 3–6 themes (sections).
122+
2. Run the prompt with a one‑line context: “Topic: `what we discussed`.”
123+
3. Paste result into `project_data.json`.
124+
4. `python import_to_todoist.py` to create the project.
97125
98126
This isn’t flashy; it’s deliberately boring—in a good way. It removes the micro‑decisions that slow me down and lets me get to the work that actually needs my attention.
99127
@@ -112,8 +140,7 @@ Find the code on GitHub: [devandapaige/todoist](https://github.com/devandapaige/
112140
]]></content:encoded>
113141
<author>Amanda Nelson</author>
114142
<category>automation</category>
115-
<category>todoist</category>
116-
<category>python</category>
143+
<category>software</category>
117144
<category>workflows</category>
118145
</item>
119146
<item>

src/app/globals.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
--brand-light-purple: #d8b9f7;
1111
--brand-purple: #442b48;
1212
--brand-blue: #00a6fb;
13+
--brand-fuchsia: #ff39bc;
1314
--brand-hyperlink-green: #156624;
1415
}
1516

src/app/privacy-pleasure/page.tsx

Lines changed: 712 additions & 0 deletions
Large diffs are not rendered by default.

src/app/resources/page.tsx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,46 @@ export default function ResourcesPage() {
283283
</Link>
284284
</div>
285285

286+
{/* Privacy Pleasure */}
287+
<div className="bg-white/95 border-2 border-brand-green-accent rounded-3xl p-8 shadow-2xl">
288+
<div className="flex items-center mb-6">
289+
<div className="w-12 h-12 bg-brand-green-accent/20 rounded-full flex items-center justify-center mr-4">
290+
<span className="text-2xl">🛡️</span>
291+
</div>
292+
<div>
293+
<h3 className="text-2xl font-display text-brand-green-dark mb-1">Privacy Pleasure</h3>
294+
<p className="text-brand-green-dark/70 text-sm">4-Week Journey to Digital Independence</p>
295+
</div>
296+
</div>
297+
<p className="text-brand-green-dark mb-6">
298+
Building digital independence (slowly) in a world where billionaires monetize every click. A complete guide to password security, VPN protection, secure communication, and building your complete privacy system.
299+
</p>
300+
<div className="space-y-3 mb-6">
301+
<div className="flex items-center text-brand-green-dark text-sm">
302+
<span className="w-2 h-2 bg-brand-green-accent rounded-full mr-2"></span>
303+
Week 1: Password Foundation
304+
</div>
305+
<div className="flex items-center text-brand-green-dark text-sm">
306+
<span className="w-2 h-2 bg-brand-green-accent rounded-full mr-2"></span>
307+
Week 2: ISP & VPN Protection
308+
</div>
309+
<div className="flex items-center text-brand-green-dark text-sm">
310+
<span className="w-2 h-2 bg-brand-green-accent rounded-full mr-2"></span>
311+
Week 3: Secure Communication & File Sharing
312+
</div>
313+
<div className="flex items-center text-brand-green-dark text-sm">
314+
<span className="w-2 h-2 bg-brand-green-accent rounded-full mr-2"></span>
315+
Week 4: Your Complete System
316+
</div>
317+
</div>
318+
<Link
319+
href="/privacy-pleasure"
320+
className="block bg-brand-green-accent text-white text-center px-4 py-3 rounded-lg hover:bg-opacity-90 transition-colors font-semibold"
321+
>
322+
Explore Privacy Pleasure
323+
</Link>
324+
</div>
325+
286326
{/* AI Myth-Busting */}
287327
<div className="bg-white/95 border-2 border-brand-purple-accent rounded-3xl p-8 shadow-2xl">
288328
<div className="flex items-center mb-6">

src/components/Footer.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export default function Footer() {
6767
<li><Link href="/digital-spring-cleaning" className={footerLinkClass}>Digital Spring Cleaning</Link></li>
6868
<li><Link href="/mindful-automation" className={footerLinkClass}>Mindful Automation</Link></li>
6969
<li><Link href="/passwords" className={footerLinkClass}>Password Security Guide</Link></li>
70+
<li><Link href="/privacy-pleasure" className={footerLinkClass}>Privacy Pleasure</Link></li>
7071
</ul>
7172
</FooterSection>
7273
</div>

src/components/Header.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,13 @@ export default function Header() {
124124
>
125125
Password Security Guide
126126
</Link>
127+
<Link
128+
href="/privacy-pleasure"
129+
className="block px-4 py-2 text-brand-green-hyperlink hover:text-brand-green-accent hover:bg-brand-green-accent/10 transition-colors"
130+
onClick={() => setIsResourcesOpen(false)}
131+
>
132+
Privacy Pleasure
133+
</Link>
127134
</div>
128135
)}
129136
</div>
@@ -264,6 +271,13 @@ export default function Header() {
264271
>
265272
Password Security Guide
266273
</Link>
274+
<Link
275+
href="/privacy-pleasure"
276+
className="block text-white/80 hover:text-brand-green-accent transition-colors focus:outline-none focus:ring-2 focus:ring-brand-green-accent focus:ring-offset-2 rounded-lg px-2 py-1"
277+
onClick={() => setIsMenuOpen(false)}
278+
>
279+
Privacy Pleasure
280+
</Link>
267281
</div>
268282
</div>
269283
<Link

src/components/blog/Tag.tsx

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,24 @@ export type TagPillProps = {
88
onClick?: (tag: string) => void
99
}
1010

11-
// Brand-aligned color mapping with border (contrast) color using CSS variables
11+
// Brand-aligned color mapping with bright color vibe, black text, and black outline
12+
// All tags use bright brand colors (green, blue, fuchsia, light-purple) for cohesive bright aesthetic
1213
const TAG_STYLES: Record<string, { bg: string; text: string; border: string }> = {
13-
automation: { bg: 'var(--brand-green)', text: 'var(--brand-forest)', border: 'var(--brand-purple)' },
14-
accessibility: { bg: 'var(--brand-cream)', text: 'var(--brand-forest)', border: 'var(--brand-purple)' },
15-
wellness: { bg: 'var(--brand-light-purple)', text: 'var(--brand-forest)', border: 'var(--brand-purple)' },
16-
creativity: { bg: 'var(--brand-blue)', text: 'var(--brand-forest)', border: 'var(--brand-purple)' },
17-
foundations: { bg: 'var(--brand-cream)', text: 'var(--brand-forest)', border: 'var(--brand-purple)' },
18-
security: { bg: 'var(--brand-blue)', text: 'var(--brand-forest)', border: 'var(--brand-purple)' },
19-
community: { bg: 'var(--brand-light-purple)', text: 'var(--brand-forest)', border: 'var(--brand-purple)' },
20-
sustainability: { bg: 'var(--brand-green)', text: 'var(--brand-forest)', border: 'var(--brand-purple)' },
14+
automation: { bg: 'var(--brand-green)', text: '#000000', border: '#000000' },
15+
accessibility: { bg: 'var(--brand-light-purple)', text: '#000000', border: '#000000' },
16+
wellness: { bg: 'var(--brand-blue)', text: '#000000', border: '#000000' },
17+
creativity: { bg: 'var(--brand-fuchsia)', text: '#000000', border: '#000000' },
18+
foundations: { bg: 'var(--brand-green)', text: '#000000', border: '#000000' },
19+
security: { bg: 'var(--brand-blue)', text: '#000000', border: '#000000' },
20+
community: { bg: 'var(--brand-light-purple)', text: '#000000', border: '#000000' },
21+
sustainability: { bg: 'var(--brand-fuchsia)', text: '#000000', border: '#000000' },
22+
software: { bg: 'var(--brand-green)', text: '#000000', border: '#000000' },
23+
workflows: { bg: 'var(--brand-blue)', text: '#000000', border: '#000000' },
2124
}
2225

2326
export function TagPill({ tag, className, selected = false, onClick }: TagPillProps) {
2427
const key = tag.toLowerCase()
25-
const style = TAG_STYLES[key] || { bg: 'var(--brand-forest)', text: 'var(--brand-cream)', border: 'var(--brand-purple)' }
28+
const style = TAG_STYLES[key] || { bg: 'var(--brand-green)', text: '#000000', border: '#000000' }
2629

2730
const pillContent = (
2831
<span
@@ -34,14 +37,14 @@ export function TagPill({ tag, className, selected = false, onClick }: TagPillPr
3437
style={{
3538
backgroundColor: style.bg,
3639
color: style.text,
37-
border: `3px solid ${selected ? '#FFFFFF' : style.border}`,
38-
borderRadius: '12px',
40+
border: `3px solid ${style.border}`,
41+
borderRadius: '9999px',
3942
minHeight: '32px',
4043
minWidth: '90px',
4144
fontSize: '1.15rem',
4245
fontFamily: 'var(--font-norwester), sans-serif',
4346
letterSpacing: '0.02em',
44-
padding: '0 14px',
47+
padding: '8px 20px',
4548
margin: '0 6px 0 0',
4649
boxSizing: 'border-box',
4750
}}

src/components/blog/TagFilter.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,16 @@ export default function TagFilter({ posts, selectedTag, onTagSelect }: TagFilter
2828
effectiveSelectedTag === null && "shadow-[0_0_8px_rgba(255,255,255,0.5)]"
2929
)}
3030
style={{
31-
backgroundColor: 'rgba(255, 255, 255, 0.1)',
32-
backdropFilter: 'blur(8px)',
33-
color: '#F4F1DE',
34-
border: `3px solid ${effectiveSelectedTag === null ? '#FFFFFF' : 'rgba(255, 255, 255, 0.2)'}`,
35-
borderRadius: '12px',
31+
backgroundColor: 'var(--brand-cream)',
32+
color: '#000000',
33+
border: '3px solid #000000',
34+
borderRadius: '9999px',
3635
minHeight: '32px',
3736
minWidth: '90px',
3837
fontSize: '1.15rem',
3938
fontFamily: 'var(--font-norwester), sans-serif',
4039
letterSpacing: '0.02em',
41-
padding: '0 14px',
40+
padding: '8px 20px',
4241
margin: '0 6px 0 0',
4342
boxSizing: 'border-box',
4443
textTransform: 'uppercase',

src/content/blog/posts/todoist-scripts.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: "Automating New Projects in Todoist with Python"
33
date: "2025-10-30"
44
description: "A small set of Python scripts that build out a complete Todoist project—sections, tasks, and sub‑tasks—from a simple JSON file."
55
author: "Amanda Nelson"
6-
tags: ["automation", "todoist", "python", "workflows"]
6+
tags: ["automation", "software", "workflows"]
77
image: "https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/b585a570-ef5f-4988-a0bf-752b4e2d2a95/Beehiiv_Banner.png?t=1746662710"
88
---
99

0 commit comments

Comments
 (0)