Compare commits
21 Commits
e763f5a9d5
...
1beba26249
| Author | SHA1 | Date | |
|---|---|---|---|
| 1beba26249 | |||
| 79d52f5d92 | |||
| 9a0e324bd7 | |||
| e0c78474e1 | |||
| ab5efd049e | |||
| 2cf5db71d2 | |||
| 921142ee47 | |||
| 15e814b566 | |||
| f7a7acf7f8 | |||
| b20e2185b2 | |||
| 4194dcfeff | |||
| 3004446a29 | |||
| d6f71c0023 | |||
| ad55992be3 | |||
| eed82cd918 | |||
| defbb13741 | |||
| faef0a377d | |||
| 3dd14bb9c0 | |||
| 3f665c293e | |||
| aec09d48c3 | |||
| 853e6dc582 |
253
.github/copilot-instructions.md
vendored
253
.github/copilot-instructions.md
vendored
@@ -2,22 +2,43 @@
|
|||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
This is a hybrid workspace combining:
|
Hybrid workspace combining Obsidian-style knowledge management with code development. Uses Obsidian MD for VSCode extension (wiki-links, backlinks, graph view) alongside JavaScript/Python development tools.
|
||||||
|
|
||||||
- **Documentation**: Obsidian-style knowledge management with wiki-links and backlinks
|
**Architecture**: Documentation lives in `/docs`, code in `/code`. GitDoc auto-commits on save (1s delay), auto-pushes after commit.
|
||||||
- **Code Development**: Bookmarklets, scratchpad code, and project prototypes
|
|
||||||
|
|
||||||
## Documentation Guidelines
|
**Dual Obsidian Vaults**: Both `/docs/projects/memorypalace/` and `/docs/projects/pokemon-professor/` are independent Obsidian vaults edited in both native Obsidian and VS Code. These contain rich project-specific knowledge that can inform code implementations and provide context for related development work.
|
||||||
|
|
||||||
### Writing Style
|
## Critical Workflows
|
||||||
|
|
||||||
- Use clear, concise markdown
|
### Bookmarklet Development
|
||||||
- Employ wiki-style `[[links]]` for connecting notes
|
|
||||||
- Include frontmatter metadata in notes (date, type, tags)
|
|
||||||
- Keep daily notes in `/docs/daily/` with format `daily-YYYY-MM-DD.md`
|
|
||||||
- Place evergreen concept notes in `/docs/concepts/`
|
|
||||||
|
|
||||||
### Note Structure
|
**Never use CommonJS or require()** - this project uses ES modules exclusively.
|
||||||
|
|
||||||
|
1. Write bookmarklets as **regular, readable JavaScript** in `/code/bookmarklets/`
|
||||||
|
2. Include JSDoc comments (they're stripped during generation)
|
||||||
|
3. Run: `npm run bookmarklet -- code/bookmarklets/your-file.js`
|
||||||
|
4. Generator ([code/utils/bookmarkletMaker.js](../code/utils/bookmarkletMaker.js)) handles:
|
||||||
|
- Comment removal (single/multi-line)
|
||||||
|
- Code minification
|
||||||
|
- IIFE wrapping: `javascript:(function(){...})();`
|
||||||
|
- Clipboard copying
|
||||||
|
|
||||||
|
Example bookmarklet structure:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
/**
|
||||||
|
* My Bookmarklet - Description
|
||||||
|
*/
|
||||||
|
const elements = document.querySelectorAll('a');
|
||||||
|
elements.forEach(el => {
|
||||||
|
el.style.backgroundColor = 'yellow';
|
||||||
|
});
|
||||||
|
alert(`Found ${elements.length} links!`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Documentation Workflow
|
||||||
|
|
||||||
|
Notes use Obsidian frontmatter and wiki-linking:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
---
|
---
|
||||||
@@ -27,162 +48,92 @@ tags: []
|
|||||||
---
|
---
|
||||||
|
|
||||||
# Title
|
# Title
|
||||||
|
Content with [[wiki-links]]
|
||||||
## Overview
|
|
||||||
|
|
||||||
Brief summary
|
|
||||||
|
|
||||||
## Content
|
|
||||||
|
|
||||||
Main content with [[links]]
|
|
||||||
|
|
||||||
## Related
|
|
||||||
|
|
||||||
- [[other-note]]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Code Development Guidelines
|
**File locations by type**:
|
||||||
|
- Quick captures → `/docs/fleeting/`
|
||||||
|
- Refined concepts → `/docs/concepts/`
|
||||||
|
- Project docs → `/docs/projects/`
|
||||||
|
- Daily notes → `/docs/daily/` (format: `daily-YYYY-MM-DD.md`)
|
||||||
|
|
||||||
### Bookmarklets (`/code/bookmarklets/`)
|
### Module System (CRITICAL)
|
||||||
|
|
||||||
- Write as regular Node.js-compatible JavaScript files
|
**ES modules only** - `package.json` has `"type": "module"`:
|
||||||
- Use modern ES6+ syntax, let/const, etc. (will be minified)
|
|
||||||
- Include JSDoc comments for documentation (removed in final bookmarklet)
|
|
||||||
- Write clear, readable code - the generator handles minification
|
|
||||||
- Use descriptive variable and function names
|
|
||||||
- Test logic in Node.js if possible before converting
|
|
||||||
|
|
||||||
**Conversion Process:**
|
```javascript
|
||||||
|
// ✅ Correct
|
||||||
|
import fs from 'fs';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
export default myFunction;
|
||||||
|
export { helperFunction };
|
||||||
|
|
||||||
1. Write bookmarklet as normal `.js` file in `/code/bookmarklets/`
|
// ❌ Never use
|
||||||
2. Run: `npm run bookmarklet -- code/bookmarklets/your-file.js`
|
const fs = require('fs');
|
||||||
3. Generator automatically:
|
module.exports = myFunction;
|
||||||
- Removes all comments
|
```
|
||||||
- Minifies code
|
|
||||||
- Wraps in IIFE: `javascript:(function(){...})();`
|
|
||||||
- Copies to clipboard
|
|
||||||
4. Paste into browser bookmark URL field
|
|
||||||
|
|
||||||
### Scratchpad Code (`/code/scratchpad/`)
|
## Project-Specific Conventions
|
||||||
|
|
||||||
- This is experimental space - be creative
|
### File Naming
|
||||||
- Add `TODO:` comments for work in progress
|
- Markdown: `kebab-case.md`
|
||||||
- Use descriptive variable names
|
- JavaScript: `kebab-case.js`
|
||||||
- Include usage examples
|
- Python: `snake_case.py`
|
||||||
- Python: Follow PEP 8 style
|
- Templates in `/code/templates/` show module patterns
|
||||||
- JavaScript/TypeScript: Use modern ES6+ syntax
|
|
||||||
|
|
||||||
### Code Style
|
### Git Commits
|
||||||
|
GitDoc auto-commits, but for manual commits use conventional format:
|
||||||
|
- `docs:` - Documentation changes
|
||||||
|
- `feat:` - New features
|
||||||
|
- `fix:` - Bug fixes
|
||||||
|
- `refactor:` - Code restructuring
|
||||||
|
- `chore:` - Maintenance
|
||||||
|
|
||||||
- **Python**: PEP 8, type hints preferred
|
### Code Organization
|
||||||
- **JavaScript**: Modern ES6+, const/let over var, **ES modules (import/export)**
|
- `/code/bookmarklets/` - Browser utilities (final destination)
|
||||||
- **TypeScript**: Explicit types, interfaces over types
|
- `/code/scratchpad/` - Experiments, organized by language
|
||||||
- Comments: Explain _why_, not _what_
|
- `/code/junk-drawer/` - WIP items, miscellaneous scripts
|
||||||
- Functions: Single responsibility, descriptive names
|
- `/code/templates/` - Reusable patterns (ES module examples)
|
||||||
|
- `/code/utils/` - Build tools (bookmarklet generator, README updater)
|
||||||
|
|
||||||
### Module System
|
### README Synchronization
|
||||||
|
**Update READMEs when changing structure** - multiple READMEs mirror folder organization:
|
||||||
|
- `/README.md` - Main overview
|
||||||
|
- `/docs/README.md` - Documentation guide
|
||||||
|
- `/code/README.md` - Code overview
|
||||||
|
- `/code/bookmarklets/README.md` - Bookmarklet guide
|
||||||
|
|
||||||
**This project uses ES modules (import/export), not CommonJS (require).**
|
## Extensions & Tools Context
|
||||||
|
|
||||||
- Use `import` for dependencies: `import fs from 'fs';`
|
Workspace configured for:
|
||||||
- Use `export` for exporting: `export default myFunction;` or `export { myFunction };`
|
- Obsidian MD for VSCode - wiki-links, graph view, daily notes
|
||||||
- Package.json is configured with `"type": "module"`
|
- Code Runner - Execute Python/JS/TS directly (`runInTerminal: true`)
|
||||||
- Use `.js` extension for ES modules
|
- Todo Tree - Tracks TODO, FIXME, NOTE, IDEA, HACK, QUESTION tags
|
||||||
- For Node.js built-ins requiring special handling: `import { fileURLToPath } from 'url';`
|
- GitDoc - Auto-commit delay 1000ms, pulls on open
|
||||||
|
- Settings in `.vscode/settings.json` override defaults
|
||||||
|
|
||||||
## File Organization
|
## Key Implementation Details
|
||||||
|
|
||||||
### When to Create Files
|
### Auto-Save & GitDoc
|
||||||
|
Files auto-save after 1s (`files.autoSaveDelay: 1000`), GitDoc commits 1s after save. **Changes are pushed automatically** - no manual git commands needed during normal workflow.
|
||||||
|
|
||||||
- **Fleeting notes**: Quick captures, temporary thoughts → `/docs/fleeting/`
|
### Code Execution
|
||||||
- **Concept notes**: Refined ideas, evergreen content → `/docs/concepts/`
|
Code Runner configured with:
|
||||||
- **Project docs**: Specific project documentation → `/docs/projects/`
|
- JavaScript: `node` (ES module compatible)
|
||||||
- **Bookmarklets**: Browser utilities → `/code/bookmarklets/`
|
- Python: `python3`
|
||||||
- **Experiments**: Testing/learning → `/code/scratchpad/`
|
- TypeScript: `ts-node`
|
||||||
|
- Always saves file before running
|
||||||
|
|
||||||
### Naming Conventions
|
### Obsidian Configuration
|
||||||
|
- Vault path: root workspace directory
|
||||||
|
- Daily notes: `docs/daily/daily-YYYY-MM-DD.md`
|
||||||
|
- New notes: `docs/` by default
|
||||||
|
- Attachments: `docs/assets/`
|
||||||
|
|
||||||
- Documentation: `kebab-case.md` (e.g., `my-note.md`)
|
## Development Preferences
|
||||||
- JavaScript: `kebab-case.js` (e.g., `my-bookmarklet.js`)
|
|
||||||
- Python: `snake_case.py` (e.g., `my_script.py`)
|
|
||||||
- TypeScript: `kebab-case.ts` (e.g., `my-module.ts`)
|
|
||||||
|
|
||||||
## Git Commit Practices
|
- **Exploration over perfection** - This is a personal scratchpad
|
||||||
|
- **Document why, not what** - Code should be self-explanatory
|
||||||
GitDoc auto-commits on save. For manual commits:
|
- **Practical examples** - Include usage examples in code
|
||||||
|
- **Cross-link liberally** - Wiki-links create knowledge connections
|
||||||
- Use conventional commits: `type: description`
|
- **Track todos inline** - Use TODO/FIXME/NOTE comments (Todo Tree finds them)
|
||||||
- Types: `docs:`, `feat:`, `fix:`, `refactor:`, `chore:`
|
|
||||||
- Examples:
|
|
||||||
- `docs: add note on memory techniques`
|
|
||||||
- `feat: create bookmark highlighter bookmarklet`
|
|
||||||
- `fix: correct regex in search bookmarklet`
|
|
||||||
|
|
||||||
## Special Considerations
|
|
||||||
|
|
||||||
### Cross-Linking
|
|
||||||
|
|
||||||
When suggesting note connections:
|
|
||||||
|
|
||||||
- Look for conceptual relationships
|
|
||||||
- Suggest bidirectional links
|
|
||||||
- Consider creating index notes for related topics
|
|
||||||
|
|
||||||
### Code Reusability
|
|
||||||
|
|
||||||
- Create templates in `/code/templates/` for common patterns
|
|
||||||
- Extract reusable functions into utility modules
|
|
||||||
- Document APIs and interfaces
|
|
||||||
|
|
||||||
### Search & Discovery
|
|
||||||
|
|
||||||
- Use descriptive titles and headers
|
|
||||||
- Include relevant tags in frontmatter
|
|
||||||
- Add aliases for alternative terms
|
|
||||||
- Consider TODO tags: `TODO:`, `FIXME:`, `NOTE:`, `IDEA:`
|
|
||||||
|
|
||||||
## Preferences
|
|
||||||
|
|
||||||
- **Brevity**: Favor concise, clear explanations
|
|
||||||
- **Examples**: Include practical examples in code
|
|
||||||
- **Context**: Assume this is a personal knowledge workspace
|
|
||||||
- **Flexibility**: This is a scratchpad - prioritize exploration over perfection
|
|
||||||
- **Learning**: Explain concepts when introducing new patterns or techniques
|
|
||||||
|
|
||||||
## README Maintenance
|
|
||||||
|
|
||||||
**IMPORTANT**: Keep README files synchronized with project structure changes.
|
|
||||||
|
|
||||||
### When to Update READMEs
|
|
||||||
|
|
||||||
Update relevant README.md files whenever you:
|
|
||||||
|
|
||||||
- Add or remove folders
|
|
||||||
- Change file organization
|
|
||||||
- Add new tools or utilities
|
|
||||||
- Modify workflows or conventions
|
|
||||||
- Add new features or capabilities
|
|
||||||
|
|
||||||
### README Locations
|
|
||||||
|
|
||||||
- `/README.md` - Main project overview and quick start
|
|
||||||
- `/docs/README.md` - Documentation hub and note-taking guide
|
|
||||||
- `/code/README.md` - Code section overview
|
|
||||||
- `/code/bookmarklets/README.md` - Bookmarklet creation guide
|
|
||||||
- `/.github/README.md` - GitHub templates and structure
|
|
||||||
|
|
||||||
### Update Guidelines
|
|
||||||
|
|
||||||
- Keep structure diagrams accurate
|
|
||||||
- Update examples to reflect current patterns
|
|
||||||
- Maintain consistency across all READMEs
|
|
||||||
- Add new sections before implementation when adding major features
|
|
||||||
- Remove outdated information immediately
|
|
||||||
|
|
||||||
## Tools & Extensions Available
|
|
||||||
|
|
||||||
- Foam (wiki-links, backlinks, graph)
|
|
||||||
- Code Runner (quick code execution)
|
|
||||||
- Todo Tree (tracks TODO comments)
|
|
||||||
- Bookmarks (mark important code locations)
|
|
||||||
- ESLint (JavaScript linting)
|
|
||||||
|
|||||||
4
.vscode/extensions.json
vendored
4
.vscode/extensions.json
vendored
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"recommendations": [
|
"recommendations": [
|
||||||
"foam.foam-vscode",
|
"willasm.obsidian-md-vsc",
|
||||||
"yzhang.markdown-all-in-one",
|
"yzhang.markdown-all-in-one",
|
||||||
"kortina.vscode-markdown-notes",
|
"kortina.vscode-markdown-notes",
|
||||||
"gruntfuggly.todo-tree",
|
"gruntfuggly.todo-tree",
|
||||||
@@ -11,4 +11,4 @@
|
|||||||
"mhutchie.git-graph",
|
"mhutchie.git-graph",
|
||||||
"eamodio.gitlens"
|
"eamodio.gitlens"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
29
.vscode/settings.json
vendored
29
.vscode/settings.json
vendored
@@ -1,24 +1,19 @@
|
|||||||
{
|
{
|
||||||
// Foam Configuration
|
// Obsidian MD Configuration
|
||||||
"foam.openDailyNote.directory": "docs/daily",
|
"obsidian.vaultPath": "/Users/fragginwagon/Developer/MemoryPalace",
|
||||||
"foam.openDailyNote.filenameFormat": "'daily-'yyyy-MM-dd",
|
"obsidian.showCommandInContextMenu": true,
|
||||||
"foam.files.ignore": [
|
"obsidian.dailyNotePath": "docs/daily",
|
||||||
"**/node_modules/**",
|
"obsidian.dailyNoteFormat": "daily-YYYY-MM-DD",
|
||||||
"**/code/**/*.js",
|
"obsidian.newNoteDirectory": "docs",
|
||||||
"**/code/**/*.py",
|
"obsidian.attachmentsFolder": "docs/assets",
|
||||||
"**/code/**/*.ts"
|
|
||||||
],
|
|
||||||
|
|
||||||
// Markdown Configuration
|
// Markdown Configuration
|
||||||
"markdown.extension.toc.levels": "2..6",
|
"markdown.extension.toc.levels": "2..6",
|
||||||
"markdown.extension.completion.root": "./docs",
|
"markdown.extension.completion.root": "./docs",
|
||||||
"markdown.extension.preview.autoShowPreviewToSide": true,
|
"markdown.extension.preview.autoShowPreviewToSide": true,
|
||||||
|
|
||||||
// Markdown Notes Configuration
|
// Markdown Notes Configuration
|
||||||
"vscodeMarkdownNotes.noteCompletionConvention": "[[wiki-link]]",
|
"vscodeMarkdownNotes.noteCompletionConvention": "[[wiki-link]]",
|
||||||
"vscodeMarkdownNotes.slugifyMethod": "github-slug",
|
"vscodeMarkdownNotes.slugifyMethod": "github-slug",
|
||||||
"vscodeMarkdownNotes.workspaceFilenameConvention": "uniqueFilenames",
|
"vscodeMarkdownNotes.workspaceFilenameConvention": "uniqueFilenames",
|
||||||
|
|
||||||
// Todo Tree Configuration
|
// Todo Tree Configuration
|
||||||
"todo-tree.general.tags": [
|
"todo-tree.general.tags": [
|
||||||
"TODO",
|
"TODO",
|
||||||
@@ -36,7 +31,6 @@
|
|||||||
"opacity": 50
|
"opacity": 50
|
||||||
},
|
},
|
||||||
"todo-tree.regex.regex": "(//|#|<!--|;|/\\*|^|^[ \\t]*(-|\\d+.))\\s*($TAGS)",
|
"todo-tree.regex.regex": "(//|#|<!--|;|/\\*|^|^[ \\t]*(-|\\d+.))\\s*($TAGS)",
|
||||||
|
|
||||||
// Code Runner Configuration
|
// Code Runner Configuration
|
||||||
"code-runner.clearPreviousOutput": true,
|
"code-runner.clearPreviousOutput": true,
|
||||||
"code-runner.showExecutionMessage": true,
|
"code-runner.showExecutionMessage": true,
|
||||||
@@ -47,12 +41,10 @@
|
|||||||
"python": "python3",
|
"python": "python3",
|
||||||
"typescript": "ts-node"
|
"typescript": "ts-node"
|
||||||
},
|
},
|
||||||
|
|
||||||
// File Associations
|
// File Associations
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"*.md": "markdown"
|
"*.md": "markdown"
|
||||||
},
|
},
|
||||||
|
|
||||||
// Search Configuration
|
// Search Configuration
|
||||||
"search.exclude": {
|
"search.exclude": {
|
||||||
"**/node_modules": true,
|
"**/node_modules": true,
|
||||||
@@ -60,11 +52,9 @@
|
|||||||
"**/*.code-search": true,
|
"**/*.code-search": true,
|
||||||
"**/docs/assets/**": true
|
"**/docs/assets/**": true
|
||||||
},
|
},
|
||||||
|
|
||||||
// Auto Save
|
// Auto Save
|
||||||
"files.autoSave": "afterDelay",
|
"files.autoSave": "afterDelay",
|
||||||
"files.autoSaveDelay": 1000,
|
"files.autoSaveDelay": 1000,
|
||||||
|
|
||||||
// Editor Configuration for Markdown
|
// Editor Configuration for Markdown
|
||||||
"[markdown]": {
|
"[markdown]": {
|
||||||
"editor.wordWrap": "on",
|
"editor.wordWrap": "on",
|
||||||
@@ -76,11 +66,9 @@
|
|||||||
"editor.snippetSuggestions": "top",
|
"editor.snippetSuggestions": "top",
|
||||||
"editor.formatOnSave": true
|
"editor.formatOnSave": true
|
||||||
},
|
},
|
||||||
|
|
||||||
// Bookmarks Configuration
|
// Bookmarks Configuration
|
||||||
"bookmarks.saveBookmarksInProject": true,
|
"bookmarks.saveBookmarksInProject": true,
|
||||||
"bookmarks.navigateThroughAllFiles": true,
|
"bookmarks.navigateThroughAllFiles": true,
|
||||||
|
|
||||||
// GitDoc Configuration - Auto-commit on save
|
// GitDoc Configuration - Auto-commit on save
|
||||||
"gitdoc.enabled": true,
|
"gitdoc.enabled": true,
|
||||||
"gitdoc.autoCommitDelay": 1000,
|
"gitdoc.autoCommitDelay": 1000,
|
||||||
@@ -88,7 +76,6 @@
|
|||||||
"gitdoc.commitValidationLevel": "none",
|
"gitdoc.commitValidationLevel": "none",
|
||||||
"gitdoc.autoPush": "afterCommit",
|
"gitdoc.autoPush": "afterCommit",
|
||||||
"gitdoc.pullOnOpen": true,
|
"gitdoc.pullOnOpen": true,
|
||||||
|
|
||||||
// ESLint Configuration
|
// ESLint Configuration
|
||||||
"eslint.validate": [
|
"eslint.validate": [
|
||||||
"javascript",
|
"javascript",
|
||||||
@@ -96,4 +83,4 @@
|
|||||||
"typescript",
|
"typescript",
|
||||||
"typescriptreact"
|
"typescriptreact"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
39
README.md
39
README.md
@@ -2,6 +2,13 @@
|
|||||||
|
|
||||||
A hybrid workspace combining Obsidian-style knowledge management with code development.
|
A hybrid workspace combining Obsidian-style knowledge management with code development.
|
||||||
|
|
||||||
|
## 📚 Documentation
|
||||||
|
|
||||||
|
**New to this workspace?**
|
||||||
|
|
||||||
|
- Setup: See [SETUP.md](SETUP.md) for installation on a new computer
|
||||||
|
- Obsidian Guide: See [docs/OBSIDIAN_GUIDE.md](docs/OBSIDIAN_GUIDE.md) for comprehensive guide
|
||||||
|
|
||||||
## 📁 Structure
|
## 📁 Structure
|
||||||
|
|
||||||
### Documentation (`/docs`)
|
### Documentation (`/docs`)
|
||||||
@@ -30,9 +37,10 @@ A hybrid workspace combining Obsidian-style knowledge management with code devel
|
|||||||
|
|
||||||
### Creating Notes
|
### Creating Notes
|
||||||
|
|
||||||
- Press `Cmd+Shift+P` and type "Foam: Create New Note" to create a linked note
|
- Press `Cmd+Shift+P` and type "Obsidian: Open Today's Daily Note" for daily notes
|
||||||
- Use `[[wiki-style links]]` to connect notes
|
- Use `[[wiki-style links]]` to connect notes
|
||||||
- Daily notes: "Foam: Open Daily Note"
|
- Quick Switcher: "Obsidian: Quick Switcher" to navigate between notes
|
||||||
|
- Graph View: "Obsidian: Open Graph View" to visualize connections
|
||||||
|
|
||||||
### Linking Notes
|
### Linking Notes
|
||||||
|
|
||||||
@@ -50,9 +58,10 @@ A hybrid workspace combining Obsidian-style knowledge management with code devel
|
|||||||
|
|
||||||
### Documentation Features
|
### Documentation Features
|
||||||
|
|
||||||
- **Wiki-style linking** - Connect ideas with `[[links]]`
|
- **Wiki-style linking** - Connect ideas with `[[links]]` ("Obsidian: Show Backlinks")
|
||||||
- **Backlinks** - See which notes reference the current note
|
- **Graph visualization** - Visual map of your knowledge ("Obsidian: Open Graph View")
|
||||||
- **Graph visualization** - Visual map of your knowledge
|
- **Daily notes** - Quick capture with today's note ("Obsidian: Open Today's Daily Note")
|
||||||
|
- **Quick Switcher** - Fast navigation between notesowledge
|
||||||
- **Daily notes** - Automatic daily note creation
|
- **Daily notes** - Automatic daily note creation
|
||||||
|
|
||||||
### Code Features
|
### Code Features
|
||||||
@@ -62,16 +71,18 @@ A hybrid workspace combining Obsidian-style knowledge management with code devel
|
|||||||
- **Code bookmarks** - Mark important code sections
|
- **Code bookmarks** - Mark important code sections
|
||||||
- **Todo tracking** - Track TODOs across all files
|
- **Todo tracking** - Track TODOs across all files
|
||||||
|
|
||||||
## 🎯 Useful Commands
|
## 🎯 Useful Comma | Shortcut | Description |
|
||||||
|
|
||||||
| Command | Shortcut | Description |
|
| ------------------ | ---------- | ----------------------------------- |
|
||||||
| --------------- | ---------- | ------------------------- |
|
| Daily Note | - | Obsidian: Open Today's Daily Note |
|
||||||
| Create New Note | - | Foam: Create New Note |
|
| Quick Switcher | - | Obsidian: Quick Switcher |
|
||||||
| Open Daily Note | - | Foam: Open Daily Note |
|
| Show Graph | - | Obsidian: Open Graph View |
|
||||||
| Show Graph | - | Foam: Show Graph |
|
| Show Backlinks | - | Obsidian: Show Backlinks |
|
||||||
| Run Code | Ctrl+Alt+N | Execute current file |
|
| Run Code | Ctrl+Alt+N | Execute current file |
|
||||||
| Toggle Bookmark | Cmd+Alt+K | Mark/unmark code location |
|
| Toggle Bookmark | Cmd+Alt+K | Mark/unmark code location |
|
||||||
| Show Todos | - | Todo Tree: Focus on View |
|
| Show Todos | - | Todo Tree: Focus on View |
|
||||||
|
| Toggle Bookmark | Cmd+Alt+K | Mark/unmark code location |
|
||||||
|
| Show Todos | - | Todo Tree: Focus on View |
|
||||||
|
|
||||||
## 🔍 Search Tips
|
## 🔍 Search Tips
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,10 @@
|
|||||||
* Example:
|
* Example:
|
||||||
* npm run bookmarklet -- code/bookmarklets/example-bookmarklet.js
|
* npm run bookmarklet -- code/bookmarklets/example-bookmarklet.js
|
||||||
*/
|
*/
|
||||||
import fs from "fs";
|
import fs from 'fs';
|
||||||
import path from "path";
|
import path from 'path';
|
||||||
import clipboardy from "clipboardy";
|
import clipboardy from 'clipboardy';
|
||||||
import { fileURLToPath } from "url";
|
import { fileURLToPath } from 'url';
|
||||||
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = path.dirname(__filename);
|
const __dirname = path.dirname(__filename);
|
||||||
@@ -29,9 +29,9 @@ const __dirname = path.dirname(__filename);
|
|||||||
*/
|
*/
|
||||||
function removeComments(code) {
|
function removeComments(code) {
|
||||||
// Remove multi-line comments /* ... */
|
// Remove multi-line comments /* ... */
|
||||||
code = code.replace(/\/\*[\s\S]*?\*\//g, "");
|
code = code.replace(/\/\*[\s\S]*?\*\//g, '');
|
||||||
// Remove single-line comments //
|
// Remove single-line comments //
|
||||||
code = code.replace(/\/\/.*$/gm, "");
|
code = code.replace(/\/\/.*$/gm, '');
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,12 +42,12 @@ function removeComments(code) {
|
|||||||
*/
|
*/
|
||||||
function minify(code) {
|
function minify(code) {
|
||||||
return code
|
return code
|
||||||
.split("\n")
|
.split('\n')
|
||||||
.map((line) => line.trim())
|
.map(line => line.trim())
|
||||||
.filter((line) => line.length > 0)
|
.filter(line => line.length > 0)
|
||||||
.join(" ")
|
.join(' ')
|
||||||
.replace(/\s+/g, " ")
|
.replace(/\s+/g, ' ')
|
||||||
.replace(/\s*([{}();,])\s*/g, "$1");
|
.replace(/\s*([{}();,])\s*/g, '$1');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -62,7 +62,7 @@ function generateBookmarklet(filePath) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Read the JavaScript file
|
// Read the JavaScript file
|
||||||
const jsCode = fs.readFileSync(filePath, "utf8");
|
const jsCode = fs.readFileSync(filePath, 'utf8');
|
||||||
|
|
||||||
// Clean and minify
|
// Clean and minify
|
||||||
let cleanedCode = removeComments(jsCode);
|
let cleanedCode = removeComments(jsCode);
|
||||||
@@ -79,11 +79,11 @@ try {
|
|||||||
const filePath = process.argv[2];
|
const filePath = process.argv[2];
|
||||||
|
|
||||||
if (!filePath) {
|
if (!filePath) {
|
||||||
console.error("❌ Error: Please provide a file path");
|
console.error('❌ Error: Please provide a file path');
|
||||||
console.log("\nUsage:");
|
console.log('\nUsage:');
|
||||||
console.log(" npm run bookmarklet -- <path-to-js-file>");
|
console.log(' npm run bookmarklet -- <path-to-js-file>');
|
||||||
console.log("\nExample:");
|
console.log('\nExample:');
|
||||||
console.log(" npm run bookmarklet -- code/bookmarklets/my-bookmarklet.js");
|
console.log(' npm run bookmarklet -- code/bookmarklets/my-bookmarklet.js');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,14 +93,14 @@ try {
|
|||||||
// Copy to clipboard
|
// Copy to clipboard
|
||||||
clipboardy.writeSync(bookmarklet);
|
clipboardy.writeSync(bookmarklet);
|
||||||
|
|
||||||
console.log("✅ Bookmarklet generated successfully!");
|
console.log('✅ Bookmarklet generated successfully!');
|
||||||
console.log(`📁 Source: ${fileName}`);
|
console.log(`📁 Source: ${fileName}`);
|
||||||
console.log(`📋 Copied to clipboard (${bookmarklet.length} characters)`);
|
console.log(`📋 Copied to clipboard (${bookmarklet.length} characters)`);
|
||||||
console.log("\n📝 Next steps:");
|
console.log('\n📝 Next steps:');
|
||||||
console.log(" 1. Create a new bookmark in your browser");
|
console.log(' 1. Create a new bookmark in your browser');
|
||||||
console.log(" 2. Paste the clipboard content as the URL");
|
console.log(' 2. Paste the clipboard content as the URL');
|
||||||
console.log(" 3. Give it a name and save");
|
console.log(' 3. Give it a name and save');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("❌ Error:", error.message);
|
console.error('❌ Error:', error.message);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
396
code/utils/deploy-pokedex.js
Normal file
396
code/utils/deploy-pokedex.js
Normal file
@@ -0,0 +1,396 @@
|
|||||||
|
/**
|
||||||
|
* Pokedex.Online Deployment Script
|
||||||
|
*
|
||||||
|
* Deploys the pokedex.online Docker container to Synology NAS via SSH.
|
||||||
|
* - Connects to Synology using configured SSH hosts
|
||||||
|
* - Transfers files via SFTP
|
||||||
|
* - Manages Docker deployment with rollback on failure
|
||||||
|
* - Performs health check to verify deployment
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* node code/utils/deploy-pokedex.js [--target internal|external] [--port 8080] [--ssl-port 8443]
|
||||||
|
* npm run deploy:pokedex -- --target external --port 8081 --ssl-port 8444
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
* npm run deploy:pokedex # Deploy to internal (10.0.0.81) on port 8080
|
||||||
|
* npm run deploy:pokedex -- --target external # Deploy to external (home.gregrjacobs.com)
|
||||||
|
* npm run deploy:pokedex -- --port 8081 # Deploy to internal on port 8081
|
||||||
|
* npm run deploy:pokedex -- --port 8080 --ssl-port 8443 # Deploy with HTTPS on port 8443
|
||||||
|
* npm run deploy:pokedex -- --target external --port 3000 --ssl-port 3443
|
||||||
|
*/
|
||||||
|
import { NodeSSH } from 'node-ssh';
|
||||||
|
import fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
import http from 'http';
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
||||||
|
// Configuration
|
||||||
|
const SSH_HOSTS = {
|
||||||
|
internal: {
|
||||||
|
host: '10.0.0.81',
|
||||||
|
port: 2323,
|
||||||
|
username: 'GregRJacobs',
|
||||||
|
privateKeyPath: '~/.ssh/ds3627xs_gregrjacobs',
|
||||||
|
password: 'J@Cubs88'
|
||||||
|
},
|
||||||
|
external: {
|
||||||
|
host: 'home.gregrjacobs.com',
|
||||||
|
port: 2323,
|
||||||
|
username: 'GregRJacobs',
|
||||||
|
privateKeyPath: '~/.ssh/ds3627xs_gregrjacobs',
|
||||||
|
password: 'J@Cubs88'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const REMOTE_PATH = '/volume1/docker/pokedex-online/base';
|
||||||
|
const CONTAINER_NAME = 'pokedex-online';
|
||||||
|
const SOURCE_DIR = path.resolve(__dirname, '../websites/pokedex.online/apps');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse command line arguments
|
||||||
|
* @returns {Object} Parsed arguments
|
||||||
|
*/
|
||||||
|
function parseArgs() {
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
const config = {
|
||||||
|
target: 'internal',
|
||||||
|
port: 8080,
|
||||||
|
sslPort: null
|
||||||
|
};
|
||||||
|
|
||||||
|
for (let i = 0; i < args.length; i++) {
|
||||||
|
if (args[i] === '--target' && args[i + 1]) {
|
||||||
|
config.target = args[i + 1];
|
||||||
|
i++;
|
||||||
|
} else if (args[i] === '--port' && args[i + 1]) {
|
||||||
|
config.port = parseInt(args[i + 1], 10);
|
||||||
|
i++;
|
||||||
|
} else if (args[i] === '--ssl-port' && args[i + 1]) {
|
||||||
|
config.sslPort = parseInt(args[i + 1], 10);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate target
|
||||||
|
if (!SSH_HOSTS[config.target]) {
|
||||||
|
throw new Error(
|
||||||
|
`Invalid target: ${config.target}. Must be 'internal' or 'external'.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate port
|
||||||
|
if (isNaN(config.port) || config.port < 1 || config.port > 65535) {
|
||||||
|
throw new Error(
|
||||||
|
`Invalid port: ${config.port}. Must be between 1 and 65535.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate SSL port if provided
|
||||||
|
if (
|
||||||
|
config.sslPort !== null &&
|
||||||
|
(isNaN(config.sslPort) || config.sslPort < 1 || config.sslPort > 65535)
|
||||||
|
) {
|
||||||
|
throw new Error(
|
||||||
|
`Invalid SSL port: ${config.sslPort}. Must be between 1 and 65535.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expand tilde in file paths
|
||||||
|
* @param {string} filepath - Path potentially starting with ~
|
||||||
|
* @returns {string} Expanded path
|
||||||
|
*/
|
||||||
|
function expandTilde(filepath) {
|
||||||
|
if (filepath.startsWith('~/')) {
|
||||||
|
return path.join(process.env.HOME, filepath.slice(2));
|
||||||
|
}
|
||||||
|
return filepath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create modified docker-compose.yml with custom ports
|
||||||
|
* @param {number} port - HTTP port to map to container
|
||||||
|
* @param {number|null} sslPort - HTTPS port to map to container (optional)
|
||||||
|
* @returns {string} Modified docker-compose content
|
||||||
|
*/
|
||||||
|
function createModifiedDockerCompose(port, sslPort) {
|
||||||
|
const originalPath = path.join(SOURCE_DIR, 'docker-compose.yml');
|
||||||
|
let content = fs.readFileSync(originalPath, 'utf8');
|
||||||
|
|
||||||
|
// Replace HTTP port mapping (handle both single and double quotes)
|
||||||
|
content = content.replace(/- ['"](\d+):80['"]/, `- '${port}:80'`);
|
||||||
|
|
||||||
|
// Replace HTTPS port mapping if SSL port provided
|
||||||
|
if (sslPort !== null) {
|
||||||
|
content = content.replace(/- ['"](\d+):443['"]/, `- '${sslPort}:443'`);
|
||||||
|
} else {
|
||||||
|
// Remove HTTPS port mapping if no SSL port specified
|
||||||
|
content = content.replace(/\s*- ['"](\d+):443['"]/g, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform HTTP health check
|
||||||
|
* @param {string} host - Host to check
|
||||||
|
* @param {number} port - Port to check
|
||||||
|
* @param {number} retries - Number of retries
|
||||||
|
* @returns {Promise<boolean>} True if healthy
|
||||||
|
*/
|
||||||
|
async function healthCheck(host, port, retries = 5) {
|
||||||
|
for (let i = 0; i < retries; i++) {
|
||||||
|
try {
|
||||||
|
await new Promise((resolve, reject) => {
|
||||||
|
const req = http.get(
|
||||||
|
`http://${host}:${port}`,
|
||||||
|
{ timeout: 5000 },
|
||||||
|
res => {
|
||||||
|
if (res.statusCode === 200) {
|
||||||
|
resolve();
|
||||||
|
} else {
|
||||||
|
reject(new Error(`HTTP ${res.statusCode}`));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
req.on('error', reject);
|
||||||
|
req.on('timeout', () => {
|
||||||
|
req.destroy();
|
||||||
|
reject(new Error('Request timeout'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
} catch (error) {
|
||||||
|
if (i < retries - 1) {
|
||||||
|
console.log(
|
||||||
|
`⏳ Health check attempt ${i + 1}/${retries} failed, retrying in 3s...`
|
||||||
|
);
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 3000));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main deployment function
|
||||||
|
*/
|
||||||
|
async function deploy() {
|
||||||
|
const ssh = new NodeSSH();
|
||||||
|
let previousImage = null;
|
||||||
|
let containerExisted = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Parse arguments
|
||||||
|
const config = parseArgs();
|
||||||
|
const sshConfig = SSH_HOSTS[config.target];
|
||||||
|
|
||||||
|
console.log('🚀 Starting Pokedex.Online deployment');
|
||||||
|
console.log(
|
||||||
|
`📡 Target: ${config.target} (${sshConfig.host}:${sshConfig.port})`
|
||||||
|
);
|
||||||
|
console.log(`🔌 HTTP Port: ${config.port}`);
|
||||||
|
if (config.sslPort) {
|
||||||
|
console.log(`🔒 HTTPS Port: ${config.sslPort}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect to Synology
|
||||||
|
console.log('\n🔐 Connecting to Synology...');
|
||||||
|
await ssh.connect({
|
||||||
|
host: sshConfig.host,
|
||||||
|
port: sshConfig.port,
|
||||||
|
username: sshConfig.username,
|
||||||
|
privateKeyPath: expandTilde(sshConfig.privateKeyPath),
|
||||||
|
password: sshConfig.password,
|
||||||
|
tryKeyboard: true
|
||||||
|
});
|
||||||
|
console.log('✅ Connected successfully');
|
||||||
|
|
||||||
|
// Check if container exists and capture current image
|
||||||
|
console.log('\n📦 Checking for existing container...');
|
||||||
|
console.log(` Container name: ${CONTAINER_NAME}`);
|
||||||
|
try {
|
||||||
|
const result = await ssh.execCommand(
|
||||||
|
`/usr/local/bin/docker inspect --format='{{.Image}}' ${CONTAINER_NAME} || /usr/bin/docker inspect --format='{{.Image}}' ${CONTAINER_NAME}`
|
||||||
|
);
|
||||||
|
console.log(` Command exit code: ${result.code}`);
|
||||||
|
if (result.stdout) console.log(` Stdout: ${result.stdout.trim()}`);
|
||||||
|
if (result.stderr) console.log(` Stderr: ${result.stderr.trim()}`);
|
||||||
|
|
||||||
|
if (result.code === 0 && result.stdout.trim()) {
|
||||||
|
previousImage = result.stdout.trim();
|
||||||
|
containerExisted = true;
|
||||||
|
console.log(
|
||||||
|
`✅ Found existing container (image: ${previousImage.substring(0, 12)}...)`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.log('ℹ️ No existing container found');
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(` Error: ${error.message}`);
|
||||||
|
console.log('ℹ️ No existing container found');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create remote directory
|
||||||
|
console.log('\n📁 Creating remote directory...');
|
||||||
|
const mkdirResult = await ssh.execCommand(`mkdir -p ${REMOTE_PATH}`);
|
||||||
|
console.log(` Command: mkdir -p ${REMOTE_PATH}`);
|
||||||
|
if (mkdirResult.stdout) console.log(` Output: ${mkdirResult.stdout}`);
|
||||||
|
if (mkdirResult.stderr) console.log(` Stderr: ${mkdirResult.stderr}`);
|
||||||
|
console.log(` ✅ Directory ready`);
|
||||||
|
|
||||||
|
// Create modified docker-compose.yml
|
||||||
|
const modifiedDockerCompose = createModifiedDockerCompose(
|
||||||
|
config.port,
|
||||||
|
config.sslPort
|
||||||
|
);
|
||||||
|
const tempDockerComposePath = path.join(
|
||||||
|
SOURCE_DIR,
|
||||||
|
'docker-compose.tmp.yml'
|
||||||
|
);
|
||||||
|
fs.writeFileSync(tempDockerComposePath, modifiedDockerCompose);
|
||||||
|
|
||||||
|
// Transfer files
|
||||||
|
console.log('\n📤 Transferring files...');
|
||||||
|
const filesToTransfer = [
|
||||||
|
{
|
||||||
|
local: path.join(SOURCE_DIR, 'index.html'),
|
||||||
|
remote: `${REMOTE_PATH}/index.html`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
local: path.join(SOURCE_DIR, 'Dockerfile'),
|
||||||
|
remote: `${REMOTE_PATH}/Dockerfile`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
local: tempDockerComposePath,
|
||||||
|
remote: `${REMOTE_PATH}/docker-compose.yml`
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const file of filesToTransfer) {
|
||||||
|
try {
|
||||||
|
await ssh.putFile(file.local, file.remote);
|
||||||
|
console.log(` ✅ ${path.basename(file.local)}`);
|
||||||
|
} catch (error) {
|
||||||
|
// If SFTP fails, fall back to cat method
|
||||||
|
console.log(
|
||||||
|
` ⚠️ SFTP failed for ${path.basename(file.local)}, using cat fallback...`
|
||||||
|
);
|
||||||
|
const fileContent = fs.readFileSync(file.local, 'utf8');
|
||||||
|
const escapedContent = fileContent.replace(/'/g, "'\\''");
|
||||||
|
const catResult = await ssh.execCommand(
|
||||||
|
`cat > '${file.remote}' << 'EOFMARKER'\n${fileContent}\nEOFMARKER`
|
||||||
|
);
|
||||||
|
if (catResult.stdout) console.log(` Output: ${catResult.stdout}`);
|
||||||
|
if (catResult.stderr) console.log(` Stderr: ${catResult.stderr}`);
|
||||||
|
if (catResult.code !== 0) {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to transfer ${path.basename(file.local)}: ${catResult.stderr}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
console.log(
|
||||||
|
` ✅ ${path.basename(file.local)} (${fs.statSync(file.local).size} bytes)`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean up temp file
|
||||||
|
fs.unlinkSync(tempDockerComposePath);
|
||||||
|
|
||||||
|
// Stop existing container first to avoid port conflicts
|
||||||
|
if (containerExisted) {
|
||||||
|
console.log('\n🛑 Stopping existing container...');
|
||||||
|
const stopResult = await ssh.execCommand(
|
||||||
|
`cd ${REMOTE_PATH} && /usr/local/bin/docker compose down || /usr/local/bin/docker-compose down`
|
||||||
|
);
|
||||||
|
if (stopResult.stdout) console.log(` ${stopResult.stdout.trim()}`);
|
||||||
|
console.log(' ✅ Container stopped');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deploy with docker-compose
|
||||||
|
console.log('\n🐳 Building and starting Docker container...');
|
||||||
|
console.log(` Working directory: ${REMOTE_PATH}`);
|
||||||
|
|
||||||
|
// Try Docker Compose V2 first (docker compose), then fall back to V1 (docker-compose)
|
||||||
|
// Use full paths for Synology
|
||||||
|
console.log(' Attempting: /usr/local/bin/docker compose up -d --build');
|
||||||
|
let deployResult = await ssh.execCommand(
|
||||||
|
`cd ${REMOTE_PATH} && /usr/local/bin/docker compose up -d --build || /usr/local/bin/docker-compose up -d --build || /usr/bin/docker compose up -d --build`,
|
||||||
|
{ stream: 'both' }
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('\n 📋 Docker Output:');
|
||||||
|
if (deployResult.stdout) {
|
||||||
|
deployResult.stdout.split('\n').forEach(line => {
|
||||||
|
if (line.trim()) console.log(` ${line}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (deployResult.stderr) {
|
||||||
|
console.log('\n ⚠️ Docker Stderr:');
|
||||||
|
deployResult.stderr.split('\n').forEach(line => {
|
||||||
|
if (line.trim()) console.log(` ${line}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
console.log(` Exit code: ${deployResult.code}`);
|
||||||
|
|
||||||
|
if (deployResult.code !== 0) {
|
||||||
|
throw new Error(`Docker deployment failed: ${deployResult.stderr}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('\n✅ Container started');
|
||||||
|
|
||||||
|
// Health check
|
||||||
|
console.log('\n🏥 Performing health check...');
|
||||||
|
const isHealthy = await healthCheck(sshConfig.host, config.port);
|
||||||
|
|
||||||
|
if (!isHealthy) {
|
||||||
|
throw new Error('Health check failed - container is not responding');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('✅ Health check passed');
|
||||||
|
console.log(`\n🎉 Deployment successful!`);
|
||||||
|
console.log(`🌐 HTTP: http://${sshConfig.host}:${config.port}`);
|
||||||
|
if (config.sslPort) {
|
||||||
|
console.log(`🔒 HTTPS: https://${sshConfig.host}:${config.sslPort}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
ssh.dispose();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('\n❌ Deployment failed:', error.message);
|
||||||
|
|
||||||
|
// Rollback
|
||||||
|
if (previousImage) {
|
||||||
|
console.log('\n🔄 Rolling back to previous image...');
|
||||||
|
try {
|
||||||
|
await ssh.execCommand(
|
||||||
|
`cd ${REMOTE_PATH} && docker-compose down && docker tag ${previousImage} pokedex-online:latest && docker-compose up -d`
|
||||||
|
);
|
||||||
|
console.log('✅ Rollback successful');
|
||||||
|
} catch (rollbackError) {
|
||||||
|
console.error('❌ Rollback failed:', rollbackError.message);
|
||||||
|
}
|
||||||
|
} else if (containerExisted === false) {
|
||||||
|
console.log('\n🧹 Cleaning up failed deployment...');
|
||||||
|
try {
|
||||||
|
await ssh.execCommand(
|
||||||
|
`cd ${REMOTE_PATH} && docker-compose down --volumes --remove-orphans`
|
||||||
|
);
|
||||||
|
console.log('✅ Cleanup successful');
|
||||||
|
} catch (cleanupError) {
|
||||||
|
console.error('❌ Cleanup failed:', cleanupError.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ssh.dispose();
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run deployment
|
||||||
|
deploy();
|
||||||
296
code/utils/organize-pokemon-resources.js
Normal file
296
code/utils/organize-pokemon-resources.js
Normal file
@@ -0,0 +1,296 @@
|
|||||||
|
/**
|
||||||
|
* Organize Pokémon Resources
|
||||||
|
*
|
||||||
|
* Creates folder structure and renames files based on the order
|
||||||
|
* they appear on the pokemon.com resources page
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* node code/utils/organize-pokemon-resources.js
|
||||||
|
* npm run organize:pokemon
|
||||||
|
*/
|
||||||
|
import puppeteer from 'puppeteer-extra';
|
||||||
|
import StealthPlugin from 'puppeteer-extra-plugin-stealth';
|
||||||
|
import fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
|
||||||
|
puppeteer.use(StealthPlugin());
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
||||||
|
const BASE_URL =
|
||||||
|
'https://www.pokemon.com/us/play-pokemon/about/tournaments-rules-and-resources';
|
||||||
|
const RESOURCES_DIR = path.resolve(
|
||||||
|
__dirname,
|
||||||
|
'../../docs/projects/pokemon-professor/Pokemon Rules & Resources'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean filename for filesystem
|
||||||
|
*/
|
||||||
|
function sanitizeFilename(name) {
|
||||||
|
return name
|
||||||
|
.replace(/[<>:"/\\|?*]/g, '-')
|
||||||
|
.replace(/\s+/g, ' ')
|
||||||
|
.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main organization function
|
||||||
|
*/
|
||||||
|
async function organizeResources() {
|
||||||
|
console.log('🚀 Starting Pokémon Resources Organization');
|
||||||
|
console.log(`📁 Resources directory: ${RESOURCES_DIR}\n`);
|
||||||
|
|
||||||
|
const browser = await puppeteer.launch({
|
||||||
|
headless: true,
|
||||||
|
args: [
|
||||||
|
'--no-sandbox',
|
||||||
|
'--disable-setuid-sandbox',
|
||||||
|
'--disable-blink-features=AutomationControlled'
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
const page = await browser.newPage();
|
||||||
|
await page.setViewport({ width: 1920, height: 1080 });
|
||||||
|
await page.setUserAgent(
|
||||||
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('🌐 Loading main page to extract structure...');
|
||||||
|
await page.goto(BASE_URL, { waitUntil: 'networkidle0', timeout: 90000 });
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 3000));
|
||||||
|
|
||||||
|
// Extract the page structure: sections and their resources
|
||||||
|
const structure = await page.evaluate(() => {
|
||||||
|
const sections = [];
|
||||||
|
|
||||||
|
// Get the main content area
|
||||||
|
const mainContent =
|
||||||
|
document.querySelector('main, .main-content, article, #content') ||
|
||||||
|
document.body;
|
||||||
|
|
||||||
|
// Look for all text nodes and elements that might be section headers
|
||||||
|
// The page likely uses specific patterns for section titles
|
||||||
|
const allElements = Array.from(mainContent.querySelectorAll('*'));
|
||||||
|
|
||||||
|
for (let i = 0; i < allElements.length; i++) {
|
||||||
|
const element = allElements[i];
|
||||||
|
const text = element.innerText?.trim() || '';
|
||||||
|
|
||||||
|
// Check if this looks like a section header
|
||||||
|
// Pattern: ends with "Rules & Resources" or "Training Videos" or similar
|
||||||
|
const isSectionHeader =
|
||||||
|
(text.includes('Rules & Resources') ||
|
||||||
|
text.includes('Training Videos') ||
|
||||||
|
text === 'Further Resources for Players') &&
|
||||||
|
text.length < 100 &&
|
||||||
|
!text.includes('\n') &&
|
||||||
|
element.children.length < 3;
|
||||||
|
|
||||||
|
if (!isSectionHeader) continue;
|
||||||
|
|
||||||
|
const sectionTitle = text;
|
||||||
|
const links = [];
|
||||||
|
|
||||||
|
// Look ahead to find links belonging to this section
|
||||||
|
// Stop when we hit another section header
|
||||||
|
for (let j = i + 1; j < allElements.length && j < i + 50; j++) {
|
||||||
|
const nextEl = allElements[j];
|
||||||
|
const nextText = nextEl.innerText?.trim() || '';
|
||||||
|
|
||||||
|
// Stop if we hit another section header
|
||||||
|
if (
|
||||||
|
(nextText.includes('Rules & Resources') ||
|
||||||
|
nextText.includes('Training Videos') ||
|
||||||
|
nextText === 'Further Resources for Players') &&
|
||||||
|
nextText.length < 100 &&
|
||||||
|
!nextText.includes('\n') &&
|
||||||
|
nextEl.children.length < 3 &&
|
||||||
|
nextText !== sectionTitle
|
||||||
|
) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Look for links in this element
|
||||||
|
if (nextEl.tagName === 'A' && nextEl.href) {
|
||||||
|
const linkText = nextEl.innerText.trim();
|
||||||
|
if (
|
||||||
|
linkText &&
|
||||||
|
!nextEl.href.includes('javascript:') &&
|
||||||
|
!nextEl.href.includes('#')
|
||||||
|
) {
|
||||||
|
links.push({ text: linkText, href: nextEl.href });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Also check child links
|
||||||
|
const childLinks = nextEl.querySelectorAll('a[href]');
|
||||||
|
childLinks.forEach(a => {
|
||||||
|
const linkText = a.innerText.trim();
|
||||||
|
if (
|
||||||
|
linkText &&
|
||||||
|
!a.href.includes('javascript:') &&
|
||||||
|
!a.href.includes('#') &&
|
||||||
|
a.href.startsWith('http')
|
||||||
|
) {
|
||||||
|
links.push({ text: linkText, href: a.href });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (links.length > 0) {
|
||||||
|
// Deduplicate links
|
||||||
|
const uniqueLinks = [];
|
||||||
|
const seen = new Set();
|
||||||
|
links.forEach(link => {
|
||||||
|
if (!seen.has(link.text)) {
|
||||||
|
seen.add(link.text);
|
||||||
|
uniqueLinks.push(link);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
sections.push({
|
||||||
|
title: sectionTitle,
|
||||||
|
links: uniqueLinks
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sections;
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`\n📋 Found ${structure.length} sections\n`);
|
||||||
|
|
||||||
|
// Deduplicate sections by title
|
||||||
|
const uniqueSections = [];
|
||||||
|
const seenTitles = new Set();
|
||||||
|
structure.forEach(section => {
|
||||||
|
if (!seenTitles.has(section.title)) {
|
||||||
|
seenTitles.add(section.title);
|
||||||
|
// Skip the main "Play! Pokémon Rules & Resources" section header
|
||||||
|
// as it's just a page title, not a content section
|
||||||
|
if (section.title !== 'Play! Pokémon Rules & Resources') {
|
||||||
|
uniqueSections.push(section);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
`📋 After deduplication: ${uniqueSections.length} unique sections\n`
|
||||||
|
);
|
||||||
|
|
||||||
|
// Get list of existing files
|
||||||
|
const existingFiles = fs
|
||||||
|
.readdirSync(RESOURCES_DIR)
|
||||||
|
.filter(
|
||||||
|
f =>
|
||||||
|
!f.startsWith('.') &&
|
||||||
|
!f.startsWith('debug') &&
|
||||||
|
(f.endsWith('.pdf') || f.endsWith('.txt'))
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log(`📦 Found ${existingFiles.length} files to organize\n`);
|
||||||
|
|
||||||
|
let totalMoved = 0;
|
||||||
|
let sectionIndex = 1;
|
||||||
|
|
||||||
|
// Process each section
|
||||||
|
for (const section of uniqueSections) {
|
||||||
|
const sectionName = sanitizeFilename(section.title);
|
||||||
|
const folderName = `${sectionIndex.toString().padStart(2, '0')}-${sectionName}`;
|
||||||
|
const folderPath = path.join(RESOURCES_DIR, folderName);
|
||||||
|
|
||||||
|
// Create section folder
|
||||||
|
if (!fs.existsSync(folderPath)) {
|
||||||
|
fs.mkdirSync(folderPath, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`📂 Section ${sectionIndex}: ${section.title}`);
|
||||||
|
console.log(` Folder: ${folderName}`);
|
||||||
|
console.log(` Resources: ${section.links.length}\n`);
|
||||||
|
|
||||||
|
let resourceIndex = 1;
|
||||||
|
|
||||||
|
// Process each resource in this section
|
||||||
|
for (const link of section.links) {
|
||||||
|
const resourceName = sanitizeFilename(link.text);
|
||||||
|
|
||||||
|
// Find matching file
|
||||||
|
const matchingFile = existingFiles.find(f => {
|
||||||
|
const baseName = f.replace(/\.(pdf|txt)$/, '');
|
||||||
|
return (
|
||||||
|
baseName === resourceName ||
|
||||||
|
baseName.includes(resourceName) ||
|
||||||
|
resourceName.includes(baseName)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (matchingFile) {
|
||||||
|
const oldPath = path.join(RESOURCES_DIR, matchingFile);
|
||||||
|
const extension = path.extname(matchingFile);
|
||||||
|
const newName = `${sectionIndex.toString().padStart(2, '0')}-${resourceIndex.toString().padStart(2, '0')}-${resourceName}${extension}`;
|
||||||
|
const newPath = path.join(folderPath, newName);
|
||||||
|
|
||||||
|
// Move and rename file
|
||||||
|
if (fs.existsSync(oldPath)) {
|
||||||
|
fs.renameSync(oldPath, newPath);
|
||||||
|
console.log(` ✅ ${resourceIndex}. ${resourceName}${extension}`);
|
||||||
|
totalMoved++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(` ⚠️ ${resourceIndex}. ${resourceName} (not found)`);
|
||||||
|
}
|
||||||
|
|
||||||
|
resourceIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('');
|
||||||
|
sectionIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move any remaining files to an "Other" folder
|
||||||
|
const remainingFiles = fs
|
||||||
|
.readdirSync(RESOURCES_DIR)
|
||||||
|
.filter(
|
||||||
|
f =>
|
||||||
|
!f.startsWith('.') &&
|
||||||
|
!fs.statSync(path.join(RESOURCES_DIR, f)).isDirectory() &&
|
||||||
|
(f.endsWith('.pdf') || f.endsWith('.txt'))
|
||||||
|
);
|
||||||
|
|
||||||
|
if (remainingFiles.length > 0) {
|
||||||
|
const otherFolder = path.join(RESOURCES_DIR, '99-Other');
|
||||||
|
if (!fs.existsSync(otherFolder)) {
|
||||||
|
fs.mkdirSync(otherFolder, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
`📂 Moving ${remainingFiles.length} unmatched files to Other folder\n`
|
||||||
|
);
|
||||||
|
|
||||||
|
remainingFiles.forEach((file, index) => {
|
||||||
|
const oldPath = path.join(RESOURCES_DIR, file);
|
||||||
|
const newName = `99-${(index + 1).toString().padStart(2, '0')}-${file}`;
|
||||||
|
const newPath = path.join(otherFolder, newName);
|
||||||
|
fs.renameSync(oldPath, newPath);
|
||||||
|
console.log(` ✅ ${file}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`\n🎉 Organization complete!`);
|
||||||
|
console.log(`📊 Statistics:`);
|
||||||
|
console.log(` Sections created: ${sectionIndex - 1}`);
|
||||||
|
console.log(` Files organized: ${totalMoved}`);
|
||||||
|
console.log(` Files in Other: ${remainingFiles.length}`);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('❌ Error:', error.message);
|
||||||
|
process.exit(1);
|
||||||
|
} finally {
|
||||||
|
await browser.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
organizeResources();
|
||||||
389
code/utils/scrape-pokemon-resources.js
Normal file
389
code/utils/scrape-pokemon-resources.js
Normal file
@@ -0,0 +1,389 @@
|
|||||||
|
/**
|
||||||
|
* Pokémon Play! Resources Scraper
|
||||||
|
*
|
||||||
|
* Downloads official tournament rules, resources, and documentation from pokemon.com
|
||||||
|
* - PDFs: Downloads directly
|
||||||
|
* - Videos: Saves video URLs to text files
|
||||||
|
* - Web pages: Extracts and saves text content
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* node code/utils/scrape-pokemon-resources.js
|
||||||
|
* npm run scrape:pokemon
|
||||||
|
*
|
||||||
|
* Output: docs/projects/pokemon-professor/Pokemon Rules & Resources/
|
||||||
|
*/
|
||||||
|
import puppeteer from 'puppeteer-extra';
|
||||||
|
import StealthPlugin from 'puppeteer-extra-plugin-stealth';
|
||||||
|
import fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
import https from 'https';
|
||||||
|
import http from 'http';
|
||||||
|
|
||||||
|
// Add stealth plugin to avoid bot detection
|
||||||
|
puppeteer.use(StealthPlugin());
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
||||||
|
// Configuration
|
||||||
|
const BASE_URL =
|
||||||
|
'https://www.pokemon.com/us/play-pokemon/about/tournaments-rules-and-resources';
|
||||||
|
const OUTPUT_DIR = path.resolve(
|
||||||
|
__dirname,
|
||||||
|
'../../docs/projects/pokemon-professor/Pokemon Rules & Resources'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Target resource names from the page
|
||||||
|
const TARGET_RESOURCES = [
|
||||||
|
// Rules & Resources for All
|
||||||
|
'Play! Pokémon Terms of Use',
|
||||||
|
'Play! Pokémon Standards of Conduct',
|
||||||
|
'Play! Pokémon Inclusion Policy',
|
||||||
|
'Play! Pokémon Accessibility Policy',
|
||||||
|
'Play! Pokémon Trainer Username and Team Name Policy',
|
||||||
|
'Play! Pokémon Premier Events Sponsorship Policy',
|
||||||
|
'Play! Pokémon Tournament Rules Handbook',
|
||||||
|
'Play! Pokémon COVID-19 Protocols',
|
||||||
|
'Play! Pokémon Attire and Cosplay Policy',
|
||||||
|
'Play! Pokémon Penalty Guidelines',
|
||||||
|
|
||||||
|
// Pokémon TCG Rules & Resources
|
||||||
|
'Pokémon TCG Rulebook',
|
||||||
|
'Play! Pokémon Deck List (8.5x11)',
|
||||||
|
'Play! Pokémon Deck List (A4)',
|
||||||
|
'TCG Errata',
|
||||||
|
'Pokémon TCG Banned Card List',
|
||||||
|
'Mega Evolution—Phantasmal Flames Banned List and Rule Changes Announcement',
|
||||||
|
'Pokémon TCG Promo Card Legality Status',
|
||||||
|
'Pokémon TCG Alternative Play Handbook',
|
||||||
|
'Pokémon TCG Tournament Handbook',
|
||||||
|
|
||||||
|
// Video Game Rules & Resources
|
||||||
|
'Play! Pokémon Video Game Championships Tournament Handbook',
|
||||||
|
'Pokémon Video Game Team List',
|
||||||
|
|
||||||
|
// Pokémon GO Rules & Resources
|
||||||
|
'Play! Pokémon Pokémon GO Tournament Handbook',
|
||||||
|
'Pokémon GO Team List',
|
||||||
|
'Play! Pokémon Pokémon GO Championship Series Banned Pokémon List',
|
||||||
|
'Organizing Pokémon GO Events',
|
||||||
|
|
||||||
|
// Pokémon UNITE Rules & Resources
|
||||||
|
'Pokémon UNITE Championship Series Handbook',
|
||||||
|
|
||||||
|
// Pokémon League Rules & Resources
|
||||||
|
'Play! Pokémon Store Handbook',
|
||||||
|
'Play! Pokémon League Challenges, Cups, and Prerelease Guide',
|
||||||
|
'League Roster',
|
||||||
|
'League Flyer',
|
||||||
|
|
||||||
|
// Pokémon Club Rules & Resources
|
||||||
|
'Pokémon Activity Sheets',
|
||||||
|
|
||||||
|
// Further Resources for Players
|
||||||
|
'World Championships Battle Dictionary',
|
||||||
|
'Play! Pokémon Scholarship Program Terms and Conditions',
|
||||||
|
'Championship Event Awards Disbursement Information',
|
||||||
|
|
||||||
|
// Training Videos
|
||||||
|
'League Management Demos',
|
||||||
|
'Tournament Software and Reporting Events',
|
||||||
|
'Championship Series Reporting',
|
||||||
|
'TOM Training Videos',
|
||||||
|
'Tools Overview',
|
||||||
|
'Installation and Set-up',
|
||||||
|
'Setting Up Your Tournament',
|
||||||
|
'Tournament Detail Verification',
|
||||||
|
'Running & Completing the Tournament',
|
||||||
|
'Reporting Matches',
|
||||||
|
'Adding Players'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean filename for filesystem
|
||||||
|
* @param {string} name - Original name
|
||||||
|
* @returns {string} Safe filename
|
||||||
|
*/
|
||||||
|
function sanitizeFilename(name) {
|
||||||
|
return name
|
||||||
|
.replace(/[<>:"/\\|?*]/g, '-')
|
||||||
|
.replace(/\s+/g, ' ')
|
||||||
|
.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Download file from URL using page context with cookies
|
||||||
|
* @param {Page} page - Puppeteer page
|
||||||
|
* @param {string} url - File URL
|
||||||
|
* @param {string} filepath - Destination path
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
async function downloadFile(page, url, filepath) {
|
||||||
|
// Get cookies from the current page session
|
||||||
|
const cookies = await page.cookies();
|
||||||
|
const cookieString = cookies.map(c => `${c.name}=${c.value}`).join('; ');
|
||||||
|
|
||||||
|
// Use page.evaluate to download with fetch
|
||||||
|
const buffer = await page.evaluate(async downloadUrl => {
|
||||||
|
const response = await fetch(downloadUrl, {
|
||||||
|
method: 'GET',
|
||||||
|
credentials: 'include'
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`HTTP ${response.status}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const arrayBuffer = await response.arrayBuffer();
|
||||||
|
return Array.from(new Uint8Array(arrayBuffer));
|
||||||
|
}, url);
|
||||||
|
|
||||||
|
const bufferData = Buffer.from(buffer);
|
||||||
|
|
||||||
|
// Verify it's actually a PDF
|
||||||
|
const header = bufferData.slice(0, 5).toString();
|
||||||
|
if (!header.startsWith('%PDF')) {
|
||||||
|
throw new Error(`Downloaded file is not a PDF (got: ${header})`);
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(filepath, bufferData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract text content from a web page
|
||||||
|
* @param {Page} page - Puppeteer page
|
||||||
|
* @returns {Promise<string>} Page text content
|
||||||
|
*/
|
||||||
|
async function extractPageText(page) {
|
||||||
|
return await page.evaluate(() => {
|
||||||
|
// Remove script and style elements
|
||||||
|
const scripts = document.querySelectorAll(
|
||||||
|
'script, style, nav, footer, header'
|
||||||
|
);
|
||||||
|
scripts.forEach(el => el.remove());
|
||||||
|
|
||||||
|
// Get main content
|
||||||
|
const main =
|
||||||
|
document.querySelector('main, article, .content, #content') ||
|
||||||
|
document.body;
|
||||||
|
return main.innerText.trim();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main scraping function
|
||||||
|
*/
|
||||||
|
async function scrapeResources() {
|
||||||
|
console.log('🚀 Starting Pokémon Play! Resources Scraper');
|
||||||
|
console.log(`📁 Output directory: ${OUTPUT_DIR}\n`);
|
||||||
|
|
||||||
|
// Create output directory
|
||||||
|
if (!fs.existsSync(OUTPUT_DIR)) {
|
||||||
|
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
||||||
|
console.log('✅ Created output directory\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
const browser = await puppeteer.launch({
|
||||||
|
headless: true,
|
||||||
|
args: [
|
||||||
|
'--no-sandbox',
|
||||||
|
'--disable-setuid-sandbox',
|
||||||
|
'--disable-blink-features=AutomationControlled',
|
||||||
|
'--disable-web-security',
|
||||||
|
'--disable-features=IsolateOrigins,site-per-process'
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
const page = await browser.newPage();
|
||||||
|
await page.setViewport({ width: 1920, height: 1080 });
|
||||||
|
|
||||||
|
// Set realistic user agent
|
||||||
|
await page.setUserAgent(
|
||||||
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Set extra headers to appear more like a real browser
|
||||||
|
await page.setExtraHTTPHeaders({
|
||||||
|
'Accept-Language': 'en-US,en;q=0.9',
|
||||||
|
'Accept-Encoding': 'gzip, deflate, br',
|
||||||
|
Accept:
|
||||||
|
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
|
||||||
|
});
|
||||||
|
|
||||||
|
// Navigate to main page
|
||||||
|
console.log('🌐 Loading main page...');
|
||||||
|
await page.goto(BASE_URL, { waitUntil: 'networkidle0', timeout: 90000 });
|
||||||
|
|
||||||
|
// Wait for content to load - try waiting for a specific element
|
||||||
|
console.log('⏳ Waiting for content to render...');
|
||||||
|
try {
|
||||||
|
await page.waitForSelector('a[href*=".pdf"], .resource, article', {
|
||||||
|
timeout: 10000
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.log(
|
||||||
|
'⚠️ Timeout waiting for specific selectors, continuing anyway...'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 5000));
|
||||||
|
|
||||||
|
console.log('✅ Page loaded\n');
|
||||||
|
|
||||||
|
// Debug: Take a screenshot
|
||||||
|
await page.screenshot({
|
||||||
|
path: path.join(OUTPUT_DIR, 'debug-screenshot.png'),
|
||||||
|
fullPage: true
|
||||||
|
});
|
||||||
|
console.log('📸 Screenshot saved for debugging\n');
|
||||||
|
|
||||||
|
// Debug: Dump HTML content
|
||||||
|
const html = await page.content();
|
||||||
|
fs.writeFileSync(path.join(OUTPUT_DIR, 'debug-page-source.html'), html);
|
||||||
|
console.log('📄 HTML source saved for debugging\n');
|
||||||
|
|
||||||
|
// Get all links on the page with multiple strategies
|
||||||
|
const links = await page.evaluate(() => {
|
||||||
|
const anchors = Array.from(document.querySelectorAll('a'));
|
||||||
|
const allLinks = anchors
|
||||||
|
.map(a => ({
|
||||||
|
text: a.innerText.trim(),
|
||||||
|
href: a.href,
|
||||||
|
title: a.title || '',
|
||||||
|
ariaLabel: a.getAttribute('aria-label') || ''
|
||||||
|
}))
|
||||||
|
.filter(
|
||||||
|
link =>
|
||||||
|
(link.text || link.title || link.ariaLabel) &&
|
||||||
|
link.href &&
|
||||||
|
!link.href.startsWith('javascript:') &&
|
||||||
|
!link.href.includes('#')
|
||||||
|
);
|
||||||
|
|
||||||
|
// Also try to get download links specifically
|
||||||
|
const downloadLinks = Array.from(
|
||||||
|
document.querySelectorAll('[download], a[href*=".pdf"]')
|
||||||
|
).map(a => ({
|
||||||
|
text: a.innerText.trim() || a.getAttribute('download') || a.title,
|
||||||
|
href: a.href
|
||||||
|
}));
|
||||||
|
|
||||||
|
return [...allLinks, ...downloadLinks].filter(
|
||||||
|
(link, index, self) =>
|
||||||
|
index === self.findIndex(l => l.href === link.href)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`📋 Found ${links.length} total links on page`);
|
||||||
|
|
||||||
|
// Debug: Show first 10 links
|
||||||
|
if (links.length > 0) {
|
||||||
|
console.log('\n📝 Sample links found:');
|
||||||
|
links.slice(0, 10).forEach((link, i) => {
|
||||||
|
console.log(` ${i + 1}. ${link.text.substring(0, 60)}...`);
|
||||||
|
});
|
||||||
|
console.log('');
|
||||||
|
} else {
|
||||||
|
console.log(
|
||||||
|
'⚠️ No links found - page may require different loading strategy\n'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process each target resource
|
||||||
|
let processed = 0;
|
||||||
|
let downloaded = 0;
|
||||||
|
let skipped = 0;
|
||||||
|
|
||||||
|
for (const targetName of TARGET_RESOURCES) {
|
||||||
|
// Find matching link (case-insensitive, fuzzy match)
|
||||||
|
const link = links.find(
|
||||||
|
l =>
|
||||||
|
l.text.toLowerCase().includes(targetName.toLowerCase()) ||
|
||||||
|
targetName.toLowerCase().includes(l.text.toLowerCase())
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!link) {
|
||||||
|
console.log(`⚠️ Could not find link for: ${targetName}`);
|
||||||
|
skipped++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
processed++;
|
||||||
|
const safeFilename = sanitizeFilename(targetName);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Check if it's a PDF
|
||||||
|
if (link.href.toLowerCase().endsWith('.pdf')) {
|
||||||
|
const filepath = path.join(OUTPUT_DIR, `${safeFilename}.pdf`);
|
||||||
|
console.log(`📥 Downloading PDF: ${targetName}`);
|
||||||
|
console.log(` URL: ${link.href}`);
|
||||||
|
await downloadFile(page, link.href, filepath);
|
||||||
|
console.log(` ✅ Saved: ${safeFilename}.pdf\n`);
|
||||||
|
downloaded++;
|
||||||
|
}
|
||||||
|
// Check if it's a video link (YouTube, Vimeo, etc.)
|
||||||
|
else if (
|
||||||
|
link.href.includes('youtube.com') ||
|
||||||
|
link.href.includes('youtu.be') ||
|
||||||
|
link.href.includes('vimeo.com') ||
|
||||||
|
link.href.includes('video')
|
||||||
|
) {
|
||||||
|
const filepath = path.join(
|
||||||
|
OUTPUT_DIR,
|
||||||
|
`${safeFilename} - Video URL.txt`
|
||||||
|
);
|
||||||
|
console.log(`🎥 Saving video URL: ${targetName}`);
|
||||||
|
fs.writeFileSync(
|
||||||
|
filepath,
|
||||||
|
`${targetName}\n\nVideo URL: ${link.href}\n`
|
||||||
|
);
|
||||||
|
console.log(` ✅ Saved: ${safeFilename} - Video URL.txt\n`);
|
||||||
|
downloaded++;
|
||||||
|
}
|
||||||
|
// Otherwise, extract page text
|
||||||
|
else {
|
||||||
|
console.log(`📄 Extracting text from: ${targetName}`);
|
||||||
|
console.log(` URL: ${link.href}`);
|
||||||
|
|
||||||
|
const contentPage = await browser.newPage();
|
||||||
|
await contentPage.goto(link.href, {
|
||||||
|
waitUntil: 'networkidle2',
|
||||||
|
timeout: 60000
|
||||||
|
});
|
||||||
|
const text = await extractPageText(contentPage);
|
||||||
|
await contentPage.close();
|
||||||
|
|
||||||
|
const filepath = path.join(OUTPUT_DIR, `${safeFilename}.txt`);
|
||||||
|
fs.writeFileSync(
|
||||||
|
filepath,
|
||||||
|
`${targetName}\n\nSource: ${link.href}\n\n${text}\n`
|
||||||
|
);
|
||||||
|
console.log(` ✅ Saved: ${safeFilename}.txt\n`);
|
||||||
|
downloaded++;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
` ❌ Error processing ${targetName}: ${error.message}\n`
|
||||||
|
);
|
||||||
|
skipped++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('🎉 Scraping complete!');
|
||||||
|
console.log(`📊 Statistics:`);
|
||||||
|
console.log(` Total targets: ${TARGET_RESOURCES.length}`);
|
||||||
|
console.log(` Processed: ${processed}`);
|
||||||
|
console.log(` Downloaded: ${downloaded}`);
|
||||||
|
console.log(` Skipped: ${skipped}`);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('❌ Fatal error:', error.message);
|
||||||
|
process.exit(1);
|
||||||
|
} finally {
|
||||||
|
await browser.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run scraper
|
||||||
|
scrapeResources();
|
||||||
11
code/websites/pokedex.online/apps/Dockerfile
Normal file
11
code/websites/pokedex.online/apps/Dockerfile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Use nginx alpine for lightweight serving
|
||||||
|
FROM nginx:alpine
|
||||||
|
|
||||||
|
# Copy website files to nginx html directory
|
||||||
|
COPY index.html /usr/share/nginx/html/
|
||||||
|
|
||||||
|
# Expose ports 80 (HTTP) and 443 (HTTPS)
|
||||||
|
EXPOSE 80 443
|
||||||
|
|
||||||
|
# Start nginx
|
||||||
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
214
code/websites/pokedex.online/apps/README.md
Normal file
214
code/websites/pokedex.online/apps/README.md
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
# Pokedex Online
|
||||||
|
|
||||||
|
A landing page for the Pokedex Online project, containerized and ready for deployment.
|
||||||
|
|
||||||
|
## 🚀 Local Development
|
||||||
|
|
||||||
|
### Quick Start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Open index.html directly in browser
|
||||||
|
open index.html
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🐳 Docker Deployment
|
||||||
|
|
||||||
|
### Build and Run Locally
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build the image
|
||||||
|
docker build -t pokedex-online .
|
||||||
|
|
||||||
|
# Run the container
|
||||||
|
docker run -d -p 8080:80 --name pokedex-online pokedex-online
|
||||||
|
|
||||||
|
# View in browser
|
||||||
|
open http://localhost:8080
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using Docker Compose
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start the service
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# Stop the service
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
# View logs
|
||||||
|
docker-compose logs -f
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📦 Portainer Deployment
|
||||||
|
|
||||||
|
### Option 1: Stack Deployment (Recommended)
|
||||||
|
|
||||||
|
1. Log into Portainer
|
||||||
|
2. Navigate to **Stacks** → **Add stack**
|
||||||
|
3. Name: `pokedex-online`
|
||||||
|
4. Upload or paste the `docker-compose.yml` contents
|
||||||
|
5. Click **Deploy the stack**
|
||||||
|
|
||||||
|
### Option 2: Container Deployment
|
||||||
|
|
||||||
|
1. Build the image locally:
|
||||||
|
```bash
|
||||||
|
docker build -t pokedex-online:latest .
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Tag for your registry (if using):
|
||||||
|
```bash
|
||||||
|
docker tag pokedex-online:latest your-registry/pokedex-online:latest
|
||||||
|
docker push your-registry/pokedex-online:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
3. In Portainer:
|
||||||
|
- Navigate to **Containers** → **Add container**
|
||||||
|
- Name: `pokedex-online`
|
||||||
|
- Image: `pokedex-online:latest` (or your registry path)
|
||||||
|
- Port mapping: `8080:80`
|
||||||
|
- Restart policy: `unless-stopped`
|
||||||
|
- Deploy
|
||||||
|
|
||||||
|
### Option 3: Git Repository (Portainer with BuildKit)
|
||||||
|
|
||||||
|
1. In Portainer, navigate to **Stacks** → **Add stack**
|
||||||
|
2. Choose **Repository**
|
||||||
|
3. Repository URL: Your git repository URL
|
||||||
|
4. Compose path: `code/websites/pokedex.online/docker-compose.yml`
|
||||||
|
5. Deploy
|
||||||
|
|
||||||
|
## 🌐 Access
|
||||||
|
|
||||||
|
After deployment, access the site at:
|
||||||
|
- Local: http://localhost:8080
|
||||||
|
- Server: http://your-server-ip:8080
|
||||||
|
|
||||||
|
## <20> Automated Deployment to Synology
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
1. **SSH Configuration**: Ensure SSH keys are configured for Synology NAS:
|
||||||
|
- Host: `synology_internal` (10.0.0.81:2323) or `synology_external` (home.gregrjacobs.com:2323)
|
||||||
|
- User: `GregRJacobs`
|
||||||
|
- Key: `~/.ssh/ds3627xs_gregrjacobs`
|
||||||
|
|
||||||
|
2. **Remote Path**: Deployment target is `/volume1/docker/pokedex-online/base` on Synology
|
||||||
|
|
||||||
|
### Deployment Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Deploy to internal Synology (10.0.0.81) on default port 8080
|
||||||
|
npm run deploy:pokedex
|
||||||
|
|
||||||
|
# Deploy to internal with custom port
|
||||||
|
npm run deploy:pokedex -- --port 8081
|
||||||
|
|
||||||
|
# Deploy to external Synology (home.gregrjacobs.com)
|
||||||
|
npm run deploy:pokedex:external
|
||||||
|
|
||||||
|
# Deploy to external with custom port
|
||||||
|
npm run deploy:pokedex:external -- --port 3000
|
||||||
|
|
||||||
|
# Full custom deployment
|
||||||
|
npm run deploy:pokedex -- --target internal --port 8082
|
||||||
|
```
|
||||||
|
|
||||||
|
### Deployment Process
|
||||||
|
|
||||||
|
The deployment script automatically:
|
||||||
|
|
||||||
|
1. **Connects** to Synology via SSH using configured host
|
||||||
|
2. **Captures** existing container state for rollback capability
|
||||||
|
3. **Transfers** files (index.html, Dockerfile, docker-compose.yml) via SFTP
|
||||||
|
4. **Modifies** docker-compose.yml port mapping based on `--port` argument
|
||||||
|
5. **Builds** and starts the Docker container with `docker-compose up -d --build`
|
||||||
|
6. **Health checks** the deployed container (5 retries with 3s intervals)
|
||||||
|
7. **Rolls back** to previous image on failure, or cleans up if no previous deployment existed
|
||||||
|
|
||||||
|
### Health Check
|
||||||
|
|
||||||
|
After deployment, the script verifies the container is responding by making HTTP requests to:
|
||||||
|
- Internal: `http://10.0.0.81:<port>`
|
||||||
|
- External: `http://home.gregrjacobs.com:<port>`
|
||||||
|
|
||||||
|
If health check fails after 5 attempts, the deployment is rolled back automatically.
|
||||||
|
|
||||||
|
### Rollback Behavior
|
||||||
|
|
||||||
|
- **Existing container**: Rolls back to previous Docker image
|
||||||
|
- **New deployment**: Runs `docker-compose down --volumes --remove-orphans` to clean up
|
||||||
|
|
||||||
|
### CLI Options
|
||||||
|
|
||||||
|
| Option | Values | Default | Description |
|
||||||
|
|--------|--------|---------|-------------|
|
||||||
|
| `--target` | `internal`, `external` | `internal` | SSH host to deploy to |
|
||||||
|
| `--port` | `1-65535` | `8080` | HTTP port to expose on host |
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Production deployment to external Synology on port 80
|
||||||
|
npm run deploy:pokedex -- --target external --port 80
|
||||||
|
|
||||||
|
# Development deployment to internal Synology on port 8080
|
||||||
|
npm run deploy:pokedex:internal
|
||||||
|
|
||||||
|
# Test deployment on high port
|
||||||
|
npm run deploy:pokedex -- --port 9000
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Configuration
|
||||||
|
|
||||||
|
### Change Port
|
||||||
|
|
||||||
|
Edit `docker-compose.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
ports:
|
||||||
|
- "3000:80" # Change 3000 to your desired port
|
||||||
|
```
|
||||||
|
|
||||||
|
Or use the `--port` argument during automated deployment.
|
||||||
|
|
||||||
|
### Custom Domain
|
||||||
|
|
||||||
|
If using a reverse proxy (nginx, Traefik, Caddy):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.pokedex.rule=Host(`pokedex.yourdomain.com`)"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📁 Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
pokedex.online/
|
||||||
|
├── index.html # Landing page
|
||||||
|
├── Dockerfile # Container configuration
|
||||||
|
├── docker-compose.yml # Compose configuration
|
||||||
|
└── README.md # This file
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🛠️ Future Development
|
||||||
|
|
||||||
|
This is currently a landing page. Future plans:
|
||||||
|
- Interactive Pokédex with search
|
||||||
|
- Team builder
|
||||||
|
- Type effectiveness calculator
|
||||||
|
- Collection tracker
|
||||||
|
- Integration with Pokémon APIs
|
||||||
|
|
||||||
|
## 📝 Notes
|
||||||
|
|
||||||
|
- Uses nginx:alpine for minimal footprint (~23MB)
|
||||||
|
- Restart policy set to `unless-stopped`
|
||||||
|
- Watchtower compatible for auto-updates
|
||||||
|
- No environment variables needed for basic setup
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Status**: In Development
|
||||||
|
**Last Updated**: January 2026
|
||||||
12
code/websites/pokedex.online/apps/docker-compose.yml
Normal file
12
code/websites/pokedex.online/apps/docker-compose.yml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
pokedex-online:
|
||||||
|
build: .
|
||||||
|
container_name: pokedex-online
|
||||||
|
ports:
|
||||||
|
- '8083:80'
|
||||||
|
- '8444:443'
|
||||||
|
restart: unless-stopped
|
||||||
|
labels:
|
||||||
|
- 'com.centurylinklabs.watchtower.enable=true'
|
||||||
124
code/websites/pokedex.online/apps/index.html
Normal file
124
code/websites/pokedex.online/apps/index.html
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Pokedex Online - Coming Soon</title>
|
||||||
|
<style>
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||||
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
background: white;
|
||||||
|
border-radius: 20px;
|
||||||
|
padding: 60px 40px;
|
||||||
|
max-width: 600px;
|
||||||
|
width: 100%;
|
||||||
|
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pokeball {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
margin: 0 auto 30px;
|
||||||
|
position: relative;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: linear-gradient(180deg, #f44336 50%, white 50%);
|
||||||
|
border: 5px solid #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pokeball::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
background: white;
|
||||||
|
border: 5px solid #333;
|
||||||
|
border-radius: 50%;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pokeball::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 5px;
|
||||||
|
background: #333;
|
||||||
|
top: 50%;
|
||||||
|
left: 0;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
font-size: 2.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
color: #667eea;
|
||||||
|
font-size: 1.2em;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description {
|
||||||
|
color: #666;
|
||||||
|
line-height: 1.6;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status {
|
||||||
|
background: #f0f0f0;
|
||||||
|
padding: 15px;
|
||||||
|
border-radius: 10px;
|
||||||
|
color: #666;
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status strong {
|
||||||
|
color: #667eea;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.container {
|
||||||
|
padding: 40px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="pokeball"></div>
|
||||||
|
<h1>Pokedex Online</h1>
|
||||||
|
<p class="subtitle">Your Digital Pokédex Companion</p>
|
||||||
|
<p class="description">
|
||||||
|
A modern web application for exploring Pokémon data, tracking collections,
|
||||||
|
and managing your Pokémon journey. Built with ❤️ for trainers everywhere.
|
||||||
|
</p>
|
||||||
|
<div class="status">
|
||||||
|
<strong>Status:</strong> In Development<br>
|
||||||
|
Check back soon for updates!
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
353
docs/OBSIDIAN_GUIDE.md
Normal file
353
docs/OBSIDIAN_GUIDE.md
Normal file
@@ -0,0 +1,353 @@
|
|||||||
|
---
|
||||||
|
type: reference
|
||||||
|
created: 2026-01-26
|
||||||
|
tags: [obsidian, guide, tutorial]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Obsidian MD for VSCode Guide
|
||||||
|
|
||||||
|
A comprehensive guide to using Obsidian MD extension within VS Code for your Memory Palace.
|
||||||
|
|
||||||
|
## What is Obsidian MD for VSCode?
|
||||||
|
|
||||||
|
Obsidian MD for VSCode brings the power of Obsidian's knowledge management features directly into VS Code. You can use wiki-links, backlinks, graph view, and daily notes without leaving your editor.
|
||||||
|
|
||||||
|
## Key Features
|
||||||
|
|
||||||
|
### 1. Wiki-Links
|
||||||
|
|
||||||
|
Create bidirectional links between notes using `[[double brackets]]`:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
This is a note about [[Memory Techniques]] that relates to [[Spaced Repetition]].
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Ctrl/Cmd + Click** on a link to navigate
|
||||||
|
- Links to non-existent notes show up differently (you can create them on click)
|
||||||
|
- Works with paths: `[[docs/concepts/memory-techniques]]`
|
||||||
|
|
||||||
|
### 2. Backlinks
|
||||||
|
|
||||||
|
See all notes that link to the current note:
|
||||||
|
|
||||||
|
- Open **Command Palette** (Cmd+Shift+P)
|
||||||
|
- Search for "Obsidian: Show Backlinks"
|
||||||
|
- A panel shows all incoming links to current note
|
||||||
|
|
||||||
|
### 3. Graph View
|
||||||
|
|
||||||
|
Visualize your note connections:
|
||||||
|
|
||||||
|
- Open **Command Palette** (Cmd+Shift+P)
|
||||||
|
- Search for "Obsidian: Open Graph View"
|
||||||
|
- See your knowledge graph with nodes (notes) and edges (links)
|
||||||
|
- Click nodes to navigate
|
||||||
|
|
||||||
|
### 4. Daily Notes
|
||||||
|
|
||||||
|
Quick access to today's note:
|
||||||
|
|
||||||
|
- **Command Palette** → "Obsidian: Open Today's Daily Note"
|
||||||
|
- Configured to save in `docs/daily/` as `daily-YYYY-MM-DD.md`
|
||||||
|
- Great for quick captures, journal entries, and daily logs
|
||||||
|
|
||||||
|
### 5. Quick Switcher
|
||||||
|
|
||||||
|
Fast navigation between notes:
|
||||||
|
|
||||||
|
- Open **Command Palette**
|
||||||
|
- Search for "Obsidian: Quick Switcher"
|
||||||
|
- Type note name to jump to it instantly
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
### Organize Your Notes
|
||||||
|
|
||||||
|
```
|
||||||
|
docs/
|
||||||
|
├── daily/ # Daily journals and quick captures
|
||||||
|
├── concepts/ # Evergreen, refined knowledge
|
||||||
|
├── projects/ # Project-specific documentation
|
||||||
|
├── fleeting/ # Temporary notes to process later
|
||||||
|
└── reference-material/ # Resources and references
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use Frontmatter
|
||||||
|
|
||||||
|
Add metadata to every note for better organization:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
type: concept|project|fleeting|reference
|
||||||
|
created: 2026-01-26
|
||||||
|
updated: 2026-01-26
|
||||||
|
tags: [programming, javascript, bookmarklets]
|
||||||
|
status: draft|in-progress|complete
|
||||||
|
---
|
||||||
|
|
||||||
|
# Note Title
|
||||||
|
```
|
||||||
|
|
||||||
|
### Link Liberally
|
||||||
|
|
||||||
|
Don't overthink links - add them as you write:
|
||||||
|
|
||||||
|
- Link to concepts: `[[memory techniques]]`
|
||||||
|
- Link to projects: `[[paperlyte]]`
|
||||||
|
- Link to daily notes: `[[daily-2026-01-26]]`
|
||||||
|
|
||||||
|
The graph view will reveal patterns over time.
|
||||||
|
|
||||||
|
### Progressive Summarization
|
||||||
|
|
||||||
|
1. **Capture** - Write fleeting notes in `docs/fleeting/`
|
||||||
|
2. **Connect** - Add links to related concepts
|
||||||
|
3. **Refine** - Move to `docs/concepts/` when mature
|
||||||
|
4. **Highlight** - Bold key insights
|
||||||
|
5. **Summarize** - Add overview sections
|
||||||
|
|
||||||
|
### Zettelkasten Method
|
||||||
|
|
||||||
|
Create atomic notes (one idea per note):
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Memory Palace Technique
|
||||||
|
|
||||||
|
A mnemonic device using spatial memory.
|
||||||
|
|
||||||
|
## Core Concept
|
||||||
|
|
||||||
|
Associate information with specific locations in a familiar space.
|
||||||
|
|
||||||
|
## Related
|
||||||
|
|
||||||
|
- [[Spaced Repetition]]
|
||||||
|
- [[Mnemonic Devices]]
|
||||||
|
- [[Method of Loci]]
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [[reference-material/moonwalking-with-einstein]]
|
||||||
|
```
|
||||||
|
|
||||||
|
### MOC (Map of Content)
|
||||||
|
|
||||||
|
Create index notes for topics:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# JavaScript MOC
|
||||||
|
|
||||||
|
## Core Concepts
|
||||||
|
|
||||||
|
- [[ES Modules]]
|
||||||
|
- [[Async/Await]]
|
||||||
|
- [[Closures]]
|
||||||
|
|
||||||
|
## Projects
|
||||||
|
|
||||||
|
- [[bookmarklets/README]]
|
||||||
|
- [[scratchpad/experiments]]
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
- [[reference-material/you-dont-know-js]]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Workflows
|
||||||
|
|
||||||
|
### Capture Quick Thoughts
|
||||||
|
|
||||||
|
1. Open today's daily note (Command Palette → Obsidian: Open Today's Daily Note)
|
||||||
|
2. Write thoughts under `## Quick Captures`
|
||||||
|
3. Add links to related notes
|
||||||
|
4. Process later by moving to permanent notes
|
||||||
|
|
||||||
|
### Research & Learning
|
||||||
|
|
||||||
|
1. Create fleeting note in `docs/fleeting/`
|
||||||
|
2. Add source links and highlights
|
||||||
|
3. Connect to existing concepts with `[[wiki-links]]`
|
||||||
|
4. When understanding solidifies, refine into concept note
|
||||||
|
5. Archive or delete fleeting note
|
||||||
|
|
||||||
|
### Project Documentation
|
||||||
|
|
||||||
|
1. Create project folder in `docs/projects/[project-name]/`
|
||||||
|
2. Add `README.md` as entry point
|
||||||
|
3. Link to related concepts and resources
|
||||||
|
4. Use daily notes to log progress
|
||||||
|
5. Link daily entries back to project README
|
||||||
|
|
||||||
|
### Code + Documentation Together
|
||||||
|
|
||||||
|
Since this is a hybrid workspace:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Bookmarklet: Highlight Links
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Highlights all links on a page.
|
||||||
|
|
||||||
|
## Implementation
|
||||||
|
|
||||||
|
See [[code/bookmarklets/highlight-links.js]]
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Generated via: `npm run bookmarklet -- code/bookmarklets/highlight-links.js`
|
||||||
|
|
||||||
|
## Related
|
||||||
|
|
||||||
|
- [[JavaScript Bookmarklets]]
|
||||||
|
- [[Browser DOM Manipulation]]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Keyboard Shortcuts
|
||||||
|
|
||||||
|
Configure these in VS Code settings for faster workflow:
|
||||||
|
|
||||||
|
- **Quick Switcher**: Set custom keybinding
|
||||||
|
- **Daily Note**: Set custom keybinding (e.g., Cmd+Shift+D)
|
||||||
|
- **Graph View**: Set custom keybinding (e.g., Cmd+Shift+G)
|
||||||
|
- **Follow Link**: Cmd+Click (built-in)
|
||||||
|
- **Go Back**: Cmd+- (VS Code navigation)
|
||||||
|
|
||||||
|
## Tips & Tricks
|
||||||
|
|
||||||
|
### Use Aliases in Frontmatter
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
aliases: [ML, Machine Learning, AI Learning]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Machine Learning Concepts
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you can link with any alias: `[[ML]]` or `[[Machine Learning]]`
|
||||||
|
|
||||||
|
### Embed Notes
|
||||||
|
|
||||||
|
Show content from other notes:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Memory Technique Summary
|
||||||
|
|
||||||
|
![[memory-palace-technique]]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use Tags Strategically
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
tags: [in-progress, needs-review, high-priority]
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
Search by tag using VS Code's search: `#in-progress`
|
||||||
|
|
||||||
|
### Combine with Todo Tree
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## TODO List
|
||||||
|
|
||||||
|
- TODO: Research spaced repetition algorithms
|
||||||
|
- FIXME: Update outdated references
|
||||||
|
- IDEA: Create MOC for learning techniques
|
||||||
|
```
|
||||||
|
|
||||||
|
These show up in Todo Tree extension sidebar.
|
||||||
|
|
||||||
|
### Use Templates
|
||||||
|
|
||||||
|
Create templates in `docs/templates/`:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## <!-- docs/templates/concept-note.md -->
|
||||||
|
|
||||||
|
type: concept
|
||||||
|
created: {{date}}
|
||||||
|
tags: []
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# {{title}}
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
## Details
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
## Related
|
||||||
|
|
||||||
|
-
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
-
|
||||||
|
```
|
||||||
|
|
||||||
|
## Obsidian vs Foam
|
||||||
|
|
||||||
|
You've switched from Foam to Obsidian MD. Here are the differences:
|
||||||
|
|
||||||
|
| Feature | Foam | Obsidian MD |
|
||||||
|
| ------------------------ | ---- | -------------------------- |
|
||||||
|
| Graph View | ✓ | ✓ (Better visualization) |
|
||||||
|
| Backlinks | ✓ | ✓ |
|
||||||
|
| Wiki-links | ✓ | ✓ |
|
||||||
|
| Daily Notes | ✓ | ✓ |
|
||||||
|
| Quick Switcher | ✗ | ✓ |
|
||||||
|
| Community | Good | Larger |
|
||||||
|
| Obsidian App Integration | ✗ | ✓ Can open in Obsidian app |
|
||||||
|
| Performance | Good | Better for large vaults |
|
||||||
|
|
||||||
|
## Integration with Obsidian App (Optional)
|
||||||
|
|
||||||
|
You can also open this workspace in the actual Obsidian app:
|
||||||
|
|
||||||
|
1. Install [Obsidian](https://obsidian.md/)
|
||||||
|
2. Open as vault: `/Users/fragginwagon/Developer/MemoryPalace`
|
||||||
|
3. Edit in Obsidian or VS Code - they sync automatically
|
||||||
|
4. Use Obsidian's mobile app for notes on the go
|
||||||
|
|
||||||
|
Benefits:
|
||||||
|
|
||||||
|
- Richer graph view with filters
|
||||||
|
- More theme options
|
||||||
|
- Mobile app for capture
|
||||||
|
- Community plugins (dataview, calendar, etc.)
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
**Links not working?**
|
||||||
|
|
||||||
|
- Check `obsidian.vaultPath` in [.vscode/settings.json](.vscode/settings.json)
|
||||||
|
- Ensure path is `/Users/fragginwagon/Developer/MemoryPalace`
|
||||||
|
|
||||||
|
**Graph view not showing?**
|
||||||
|
|
||||||
|
- Create more notes with `[[links]]`
|
||||||
|
- Graph appears when you have interconnected notes
|
||||||
|
|
||||||
|
**Daily notes in wrong location?**
|
||||||
|
|
||||||
|
- Check `obsidian.dailyNotePath` setting
|
||||||
|
- Should be `docs/daily`
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
- [Obsidian Help](https://help.obsidian.md/)
|
||||||
|
- [Linking Your Thinking (YouTube)](https://www.youtube.com/c/NickMilo)
|
||||||
|
- [Zettelkasten Method](https://zettelkasten.de/)
|
||||||
|
- [Building a Second Brain](https://www.buildingasecondbrain.com/)
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
1. Open today's daily note and start capturing thoughts
|
||||||
|
2. Create a few concept notes with `[[links]]`
|
||||||
|
3. View your graph to see connections
|
||||||
|
4. Explore backlinks panel for any note
|
||||||
|
5. Create a MOC for your main interest areas
|
||||||
7
docs/projects/memorypalace/.obsidian/app.json
vendored
Normal file
7
docs/projects/memorypalace/.obsidian/app.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"attachmentFolderPath": "/attachments",
|
||||||
|
"alwaysUpdateLinks": true,
|
||||||
|
"newFileLocation": "current",
|
||||||
|
"promptDelete": false,
|
||||||
|
"readableLineLength": false
|
||||||
|
}
|
||||||
3
docs/projects/memorypalace/.obsidian/appearance.json
vendored
Normal file
3
docs/projects/memorypalace/.obsidian/appearance.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"cssTheme": "Things"
|
||||||
|
}
|
||||||
4
docs/projects/memorypalace/.obsidian/community-plugins.json
vendored
Normal file
4
docs/projects/memorypalace/.obsidian/community-plugins.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[
|
||||||
|
"obsidian-importer",
|
||||||
|
"obsidian-advanced-uri"
|
||||||
|
]
|
||||||
33
docs/projects/memorypalace/.obsidian/core-plugins.json
vendored
Normal file
33
docs/projects/memorypalace/.obsidian/core-plugins.json
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"file-explorer": true,
|
||||||
|
"global-search": true,
|
||||||
|
"switcher": true,
|
||||||
|
"graph": true,
|
||||||
|
"backlink": true,
|
||||||
|
"canvas": true,
|
||||||
|
"outgoing-link": true,
|
||||||
|
"tag-pane": true,
|
||||||
|
"properties": false,
|
||||||
|
"page-preview": true,
|
||||||
|
"daily-notes": true,
|
||||||
|
"templates": true,
|
||||||
|
"note-composer": true,
|
||||||
|
"command-palette": true,
|
||||||
|
"slash-command": false,
|
||||||
|
"editor-status": true,
|
||||||
|
"bookmarks": true,
|
||||||
|
"markdown-importer": false,
|
||||||
|
"zk-prefixer": false,
|
||||||
|
"random-note": false,
|
||||||
|
"outline": true,
|
||||||
|
"word-count": true,
|
||||||
|
"slides": false,
|
||||||
|
"audio-recorder": false,
|
||||||
|
"workspaces": false,
|
||||||
|
"file-recovery": true,
|
||||||
|
"publish": false,
|
||||||
|
"sync": false,
|
||||||
|
"webviewer": false,
|
||||||
|
"footnotes": false,
|
||||||
|
"bases": true
|
||||||
|
}
|
||||||
22
docs/projects/memorypalace/.obsidian/graph.json
vendored
Normal file
22
docs/projects/memorypalace/.obsidian/graph.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"collapse-filter": true,
|
||||||
|
"search": "",
|
||||||
|
"showTags": false,
|
||||||
|
"showAttachments": false,
|
||||||
|
"hideUnresolved": false,
|
||||||
|
"showOrphans": true,
|
||||||
|
"collapse-color-groups": true,
|
||||||
|
"colorGroups": [],
|
||||||
|
"collapse-display": true,
|
||||||
|
"showArrow": false,
|
||||||
|
"textFadeMultiplier": 0,
|
||||||
|
"nodeSizeMultiplier": 1,
|
||||||
|
"lineSizeMultiplier": 1,
|
||||||
|
"collapse-forces": true,
|
||||||
|
"centerStrength": 0.518713248970312,
|
||||||
|
"repelStrength": 10,
|
||||||
|
"linkStrength": 1,
|
||||||
|
"linkDistance": 250,
|
||||||
|
"scale": 1,
|
||||||
|
"close": true
|
||||||
|
}
|
||||||
34
docs/projects/memorypalace/.obsidian/plugins/obsidian-advanced-uri/main.js
vendored
Normal file
34
docs/projects/memorypalace/.obsidian/plugins/obsidian-advanced-uri/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
docs/projects/memorypalace/.obsidian/plugins/obsidian-advanced-uri/manifest.json
vendored
Normal file
11
docs/projects/memorypalace/.obsidian/plugins/obsidian-advanced-uri/manifest.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-advanced-uri",
|
||||||
|
"name": "Advanced URI",
|
||||||
|
"description": "Advanced modes for Obsidian URI",
|
||||||
|
"isDesktopOnly": false,
|
||||||
|
"js": "main.js",
|
||||||
|
"fundingUrl": "https://ko-fi.com/vinzent",
|
||||||
|
"version": "1.46.1",
|
||||||
|
"author": "Vinzent",
|
||||||
|
"authorUrl": "https://github.com/Vinzent03"
|
||||||
|
}
|
||||||
287
docs/projects/memorypalace/.obsidian/plugins/obsidian-importer/main.js
vendored
Normal file
287
docs/projects/memorypalace/.obsidian/plugins/obsidian-importer/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
docs/projects/memorypalace/.obsidian/plugins/obsidian-importer/manifest.json
vendored
Normal file
10
docs/projects/memorypalace/.obsidian/plugins/obsidian-importer/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-importer",
|
||||||
|
"name": "Importer",
|
||||||
|
"version": "1.8.2",
|
||||||
|
"minAppVersion": "0.15.0",
|
||||||
|
"description": "Import data from Notion, Evernote, Apple Notes, Microsoft OneNote, Google Keep, Bear, Roam, Textbundle, CSV, and HTML files.",
|
||||||
|
"author": "Obsidian",
|
||||||
|
"authorUrl": "https://obsidian.md",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
173
docs/projects/memorypalace/.obsidian/plugins/obsidian-importer/styles.css
vendored
Normal file
173
docs/projects/memorypalace/.obsidian/plugins/obsidian-importer/styles.css
vendored
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
.modal.mod-importer {
|
||||||
|
max-height: var(--modal-height);
|
||||||
|
padding: var(--size-4-4) 0 0 0;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.modal.mod-importer .modal-title {
|
||||||
|
padding: 0 var(--size-4-4);
|
||||||
|
}
|
||||||
|
.modal.mod-importer .modal-content {
|
||||||
|
overflow: auto;
|
||||||
|
padding: var(--size-4-4);
|
||||||
|
margin-bottom: calc(var(--input-height) + var(--size-4-8));
|
||||||
|
border-top: var(--border-width) solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
.modal.mod-importer .modal-button-container {
|
||||||
|
margin: 0 0 0 calc(var(--size-4-4) * -1);
|
||||||
|
padding: var(--size-4-4);
|
||||||
|
gap: var(--size-4-2);
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border-top: var(--border-width) solid var(--background-modifier-border);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-progress-bar {
|
||||||
|
width: 100%;
|
||||||
|
height: 8px;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: inset 0px 0px 0px 1px var(--background-modifier-border);
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-progress-bar-inner {
|
||||||
|
width: 0;
|
||||||
|
height: 100%;
|
||||||
|
background-color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-status {
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
padding: var(--size-4-2) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-stats-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
margin-top: var(--size-4-5);
|
||||||
|
margin-bottom: var(--size-4-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-stat {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-stat-count {
|
||||||
|
font-size: var(--font-ui-large);
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-log {
|
||||||
|
overflow: auto;
|
||||||
|
flex-grow: 1;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
font-size: var(--font-ui-smaller);
|
||||||
|
color: var(--text-muted);
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
padding: var(--size-4-4);
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
max-height: 300px;
|
||||||
|
user-select: text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-log .list-item {
|
||||||
|
display: inline-block;
|
||||||
|
line-height: var(--line-height-normal);
|
||||||
|
white-space: pre;
|
||||||
|
margin: var(--size-2-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-error {
|
||||||
|
color: var(--text-error);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Template configuration styles */
|
||||||
|
.importer-frontmatter-header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--size-4-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-frontmatter-header h4 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-select-all-setting {
|
||||||
|
padding: 0;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-select-all-setting .setting-item-info {
|
||||||
|
padding-inline-end: var(--size-4-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-column-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--size-4-1);
|
||||||
|
padding: var(--size-4-3) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-column-header-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--size-4-2);
|
||||||
|
font-size: var(--font-ui-smaller);
|
||||||
|
color: var(--text-muted);
|
||||||
|
padding: var(--size-2-1) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-column-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--size-4-2);
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-column-name-col {
|
||||||
|
flex: 0 0 150px;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-column-value-col {
|
||||||
|
flex: 0 0 200px;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-column-property {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-column-example-col {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
font-size: var(--font-ui-smaller);
|
||||||
|
color: var(--text-muted);
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
padding: var(--size-2-1) var(--size-4-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.importer-column-delete-col {
|
||||||
|
flex-shrink: 0;
|
||||||
|
width: 32px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fixed width buttons to prevent resizing during loading */
|
||||||
|
.notion-load-button {
|
||||||
|
width: 70px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notion-toggle-button {
|
||||||
|
width: 95px;
|
||||||
|
}
|
||||||
3
docs/projects/memorypalace/.obsidian/templates.json
vendored
Normal file
3
docs/projects/memorypalace/.obsidian/templates.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"folder": "templates"
|
||||||
|
}
|
||||||
7
docs/projects/memorypalace/.obsidian/themes/Blue Topaz/manifest.json
vendored
Normal file
7
docs/projects/memorypalace/.obsidian/themes/Blue Topaz/manifest.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"name": "Blue Topaz",
|
||||||
|
"version": "2025071401",
|
||||||
|
"minAppVersion": "1.0.0",
|
||||||
|
"author": "WhyI & Pkmer",
|
||||||
|
"authorUrl": "https://github.com/whyt-byte"
|
||||||
|
}
|
||||||
29668
docs/projects/memorypalace/.obsidian/themes/Blue Topaz/theme.css
vendored
Normal file
29668
docs/projects/memorypalace/.obsidian/themes/Blue Topaz/theme.css
vendored
Normal file
File diff suppressed because one or more lines are too long
8
docs/projects/memorypalace/.obsidian/themes/Minimal/manifest.json
vendored
Normal file
8
docs/projects/memorypalace/.obsidian/themes/Minimal/manifest.json
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"name": "Minimal",
|
||||||
|
"version": "8.1.2",
|
||||||
|
"minAppVersion": "1.9.0",
|
||||||
|
"author": "@kepano",
|
||||||
|
"authorUrl": "https://twitter.com/kepano",
|
||||||
|
"fundingUrl": "https://www.buymeacoffee.com/kepano"
|
||||||
|
}
|
||||||
2251
docs/projects/memorypalace/.obsidian/themes/Minimal/theme.css
vendored
Normal file
2251
docs/projects/memorypalace/.obsidian/themes/Minimal/theme.css
vendored
Normal file
File diff suppressed because one or more lines are too long
7
docs/projects/memorypalace/.obsidian/themes/Things/manifest.json
vendored
Normal file
7
docs/projects/memorypalace/.obsidian/themes/Things/manifest.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"name": "Things",
|
||||||
|
"version": "2.1.20",
|
||||||
|
"minAppVersion": "1.0.0",
|
||||||
|
"author": "@colineckert",
|
||||||
|
"authorUrl": "https://twitter.com/colineckert"
|
||||||
|
}
|
||||||
1628
docs/projects/memorypalace/.obsidian/themes/Things/theme.css
vendored
Normal file
1628
docs/projects/memorypalace/.obsidian/themes/Things/theme.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5
docs/projects/memorypalace/.obsidian/webviewer.json
vendored
Normal file
5
docs/projects/memorypalace/.obsidian/webviewer.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"openExternalURLs": true,
|
||||||
|
"enableAdblocking": true,
|
||||||
|
"searchEngine": "google"
|
||||||
|
}
|
||||||
161
docs/projects/memorypalace/.obsidian/workspace-mobile.json
vendored
Normal file
161
docs/projects/memorypalace/.obsidian/workspace-mobile.json
vendored
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"id": "2c1257aca1513630",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "7e92419a36179d19",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "f1c69d76fb041853",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Our story.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "Our story"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "vertical"
|
||||||
|
},
|
||||||
|
"left": {
|
||||||
|
"id": "3d75710a1eb00275",
|
||||||
|
"type": "mobile-drawer",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "fb5e8b31532d68bc",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "file-explorer",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"autoReveal": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-folder-closed",
|
||||||
|
"title": "Files"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "f4f62730cb8857dc",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "search",
|
||||||
|
"state": {
|
||||||
|
"query": "",
|
||||||
|
"matchingCase": false,
|
||||||
|
"explainSearch": false,
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical"
|
||||||
|
},
|
||||||
|
"icon": "lucide-search",
|
||||||
|
"title": "Search"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "d1347a1931227149",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "tag",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "frequency",
|
||||||
|
"useHierarchy": true,
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": ""
|
||||||
|
},
|
||||||
|
"icon": "lucide-tags",
|
||||||
|
"title": "Tags"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "fd38b4aeca67db33",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "bookmarks",
|
||||||
|
"state": {},
|
||||||
|
"icon": "lucide-bookmark",
|
||||||
|
"title": "Bookmarks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTab": 0
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"id": "d91b0f39d8edd1fc",
|
||||||
|
"type": "mobile-drawer",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "beb239baa25881f4",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "backlink",
|
||||||
|
"state": {
|
||||||
|
"file": "Our story.md",
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": "",
|
||||||
|
"backlinkCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-coming-in",
|
||||||
|
"title": "Backlinks"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2cacace8674d5157",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outgoing-link",
|
||||||
|
"state": {
|
||||||
|
"file": "Our story.md",
|
||||||
|
"linksCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-going-out",
|
||||||
|
"title": "Outgoing links"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "13dfcdfda0102440",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outline",
|
||||||
|
"state": {
|
||||||
|
"file": "Our story.md",
|
||||||
|
"followCursor": false,
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": ""
|
||||||
|
},
|
||||||
|
"icon": "lucide-list",
|
||||||
|
"title": "Outline"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTab": 0
|
||||||
|
},
|
||||||
|
"left-ribbon": {
|
||||||
|
"hiddenItems": {
|
||||||
|
"switcher:Open quick switcher": false,
|
||||||
|
"graph:Open graph view": false,
|
||||||
|
"canvas:Create new canvas": false,
|
||||||
|
"daily-notes:Open today's daily note": false,
|
||||||
|
"templates:Insert template": false,
|
||||||
|
"command-palette:Open command palette": false,
|
||||||
|
"bases:Create new base": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": "f1c69d76fb041853",
|
||||||
|
"lastOpenFiles": [
|
||||||
|
"Our story.md"
|
||||||
|
]
|
||||||
|
}
|
||||||
231
docs/projects/memorypalace/.obsidian/workspace.json
vendored
Normal file
231
docs/projects/memorypalace/.obsidian/workspace.json
vendored
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"id": "65118307aef94695",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "fb78540f6b0817b8",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "6bd06c473a6df9f7",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Random & To Sort/The Tower.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "The Tower"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "db667fd073afcf6d",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Christina Talk - Jan 15 2024.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "Christina Talk - Jan 15 2024"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTab": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "vertical"
|
||||||
|
},
|
||||||
|
"left": {
|
||||||
|
"id": "87ef67fcdb70cca7",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "51896b8d031f12a7",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "16c60370ceca95ef",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "file-explorer",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"autoReveal": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-folder-closed",
|
||||||
|
"title": "Files"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "67df3fa6c50b7b8f",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "search",
|
||||||
|
"state": {
|
||||||
|
"query": "",
|
||||||
|
"matchingCase": false,
|
||||||
|
"explainSearch": false,
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical"
|
||||||
|
},
|
||||||
|
"icon": "lucide-search",
|
||||||
|
"title": "Search"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4735c1046deb84d5",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "bookmarks",
|
||||||
|
"state": {},
|
||||||
|
"icon": "lucide-bookmark",
|
||||||
|
"title": "Bookmarks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"id": "fa8d807905c5f186",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "15acd1bca30e4e69",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "ec633bee723e26ed",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "backlink",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Christina Talk - Jan 15 2024.md",
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": "",
|
||||||
|
"backlinkCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-coming-in",
|
||||||
|
"title": "Backlinks for Christina Talk - Jan 15 2024"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "76553812ae09d02a",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outgoing-link",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md",
|
||||||
|
"linksCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-going-out",
|
||||||
|
"title": "Outgoing links from Welcome"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "a90689d024131f8e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "tag",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "frequency",
|
||||||
|
"useHierarchy": true
|
||||||
|
},
|
||||||
|
"icon": "lucide-tags",
|
||||||
|
"title": "Tags"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b05875d99c295b3e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outline",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md"
|
||||||
|
},
|
||||||
|
"icon": "lucide-list",
|
||||||
|
"title": "Outline of Welcome"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"left-ribbon": {
|
||||||
|
"hiddenItems": {
|
||||||
|
"bases:Create new base": false,
|
||||||
|
"switcher:Open quick switcher": false,
|
||||||
|
"graph:Open graph view": false,
|
||||||
|
"canvas:Create new canvas": false,
|
||||||
|
"daily-notes:Open today's daily note": false,
|
||||||
|
"templates:Insert template": false,
|
||||||
|
"command-palette:Open command palette": false,
|
||||||
|
"obsidian-importer:Open Importer": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": "db667fd073afcf6d",
|
||||||
|
"lastOpenFiles": [
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings -.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - - Dec 20.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - 51624.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Jan 31 2024.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Apr 19.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 24 2023.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Aug 11 2022.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - May 16 2024.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Apr 17 2024.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Mar 20 2024.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Feb 9 2024.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings June 29.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 11 2025.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Jan 8 2026.md",
|
||||||
|
"Home Setup/Used Ports Synology Server.md",
|
||||||
|
"Icon\r",
|
||||||
|
"Apple Notes/Gift ideas ChristmasBirthday.md",
|
||||||
|
"Random & To Sort/The Tower.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Talks - May 10 2025.md",
|
||||||
|
"Christina/Feelings Conversations",
|
||||||
|
"Apple Notes/-250.md",
|
||||||
|
"Apple Notes/- httpswrapbootstrap.comthememonarch-admin-responsive-angularjs….md",
|
||||||
|
"Apple Notes/______ earli-isasmchdoes lanes lashed mmy..md",
|
||||||
|
"Apple Notes/Christina 1/Christina Happy Mothers Day!.md",
|
||||||
|
"Apple Notes/Christina 1/age0-14& !shiny& !shadow& !legendary& !mythical& !lucky& !hatched….md",
|
||||||
|
"Apple Notes/Christina 1/!+mime& !+togep& !+burm& !+riolu& !+larv& !+chime& !+happ& !+sable….md",
|
||||||
|
"Apple Notes/Animal Crossing/Ribbot.md",
|
||||||
|
"attachments/100 1.png",
|
||||||
|
"Apple Notes/Animal Crossing/Retro Action Items.md",
|
||||||
|
"attachments/IMG_1115.jpeg",
|
||||||
|
"attachments/Drawing 2.png",
|
||||||
|
"attachments/IMG_6415.heic",
|
||||||
|
"attachments/Drawing 1.png",
|
||||||
|
"attachments/Drawing.png",
|
||||||
|
"attachments/Image.png",
|
||||||
|
"attachments/Feelings Chat 0528.jpeg",
|
||||||
|
"attachments/Pasted Graphic 2 1.png",
|
||||||
|
"attachments/mapstogpx202101793729.gpx",
|
||||||
|
"attachments/FavoriteLists_iTools_202101793649.json",
|
||||||
|
"attachments/Pasted Graphic 5.png",
|
||||||
|
"attachments/Pasted Graphic 4.png",
|
||||||
|
"attachments/iSpooferLicense.txt",
|
||||||
|
"attachments/Naka.gpx",
|
||||||
|
"attachments/Pasted Graphic 1.pdf",
|
||||||
|
"Apple Notes/Milwaukee 2025 Staff Notes",
|
||||||
|
"Apple Notes/Christina 1"
|
||||||
|
]
|
||||||
|
}
|
||||||
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.1.json
vendored
Normal file
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.1.json
vendored
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"id": "65118307aef94695",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "fb78540f6b0817b8",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "6bd06c473a6df9f7",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Random & To Sort/The Tower.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "The Tower"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "db667fd073afcf6d",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Home Setup/Used Ports Synology Server.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "Used Ports Synology Server"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTab": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "vertical"
|
||||||
|
},
|
||||||
|
"left": {
|
||||||
|
"id": "87ef67fcdb70cca7",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "51896b8d031f12a7",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "16c60370ceca95ef",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "file-explorer",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"autoReveal": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-folder-closed",
|
||||||
|
"title": "Files"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "67df3fa6c50b7b8f",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "search",
|
||||||
|
"state": {
|
||||||
|
"query": "",
|
||||||
|
"matchingCase": false,
|
||||||
|
"explainSearch": false,
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical"
|
||||||
|
},
|
||||||
|
"icon": "lucide-search",
|
||||||
|
"title": "Search"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4735c1046deb84d5",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "bookmarks",
|
||||||
|
"state": {},
|
||||||
|
"icon": "lucide-bookmark",
|
||||||
|
"title": "Bookmarks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"id": "fa8d807905c5f186",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "15acd1bca30e4e69",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "ec633bee723e26ed",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "backlink",
|
||||||
|
"state": {
|
||||||
|
"file": "Home Setup/Used Ports Synology Server.md",
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": "",
|
||||||
|
"backlinkCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-coming-in",
|
||||||
|
"title": "Backlinks for Used Ports Synology Server"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "76553812ae09d02a",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outgoing-link",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md",
|
||||||
|
"linksCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-going-out",
|
||||||
|
"title": "Outgoing links from Welcome"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "a90689d024131f8e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "tag",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "frequency",
|
||||||
|
"useHierarchy": true
|
||||||
|
},
|
||||||
|
"icon": "lucide-tags",
|
||||||
|
"title": "Tags"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b05875d99c295b3e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outline",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md"
|
||||||
|
},
|
||||||
|
"icon": "lucide-list",
|
||||||
|
"title": "Outline of Welcome"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"left-ribbon": {
|
||||||
|
"hiddenItems": {
|
||||||
|
"bases:Create new base": false,
|
||||||
|
"switcher:Open quick switcher": false,
|
||||||
|
"graph:Open graph view": false,
|
||||||
|
"canvas:Create new canvas": false,
|
||||||
|
"daily-notes:Open today's daily note": false,
|
||||||
|
"templates:Insert template": false,
|
||||||
|
"command-palette:Open command palette": false,
|
||||||
|
"obsidian-importer:Open Importer": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": "db667fd073afcf6d",
|
||||||
|
"lastOpenFiles": [
|
||||||
|
"Icon\r",
|
||||||
|
"Apple Notes/Gift ideas ChristmasBirthday.md",
|
||||||
|
"Random & To Sort/The Tower.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Talks - May 10 2025.md",
|
||||||
|
"Christina/Feelings Conversations",
|
||||||
|
"Apple Notes/-250.md",
|
||||||
|
"Apple Notes/- httpswrapbootstrap.comthememonarch-admin-responsive-angularjs….md",
|
||||||
|
"Apple Notes/______ earli-isasmchdoes lanes lashed mmy..md",
|
||||||
|
"Apple Notes/Christina 1/Christina Happy Mothers Day!.md",
|
||||||
|
"Apple Notes/Christina 1/age0-14& !shiny& !shadow& !legendary& !mythical& !lucky& !hatched….md",
|
||||||
|
"Apple Notes/Christina 1/!+mime& !+togep& !+burm& !+riolu& !+larv& !+chime& !+happ& !+sable….md",
|
||||||
|
"Apple Notes/Animal Crossing/Ribbot.md",
|
||||||
|
"attachments/100 1.png",
|
||||||
|
"Apple Notes/Animal Crossing/Retro Action Items.md",
|
||||||
|
"Apple Notes/Animal Crossing/Looking for 10NMT per run, OR Real redd artsculptures, OR 500k bells….md",
|
||||||
|
"Apple Notes/Animal Crossing/-3 Islanders, you will only use 2. -All three have to have a plot….md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 6 2026.md",
|
||||||
|
"Apple Notes/13.99+10.99+10.99+2.79 = 38.76.md",
|
||||||
|
"Apple Notes/Greg Feelings - Dec 4 2025.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 2 2025.md",
|
||||||
|
"Apple Notes/Charlie advocating.md",
|
||||||
|
"Apple Notes/Most password is.md",
|
||||||
|
"Apple Notes/I have worked with the people below and they can attest to my work….md",
|
||||||
|
"Apple Notes/Parking.md",
|
||||||
|
"attachments/IMG_1115.jpeg",
|
||||||
|
"Apple Notes/New Note 20.md",
|
||||||
|
"Apple Notes/age0-120 &!legendary &!mythical &!ultra beasts &!shiny &!4 &!xxl….md",
|
||||||
|
"attachments/Drawing 2.png",
|
||||||
|
"Apple Notes/Home events.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Oct 14 2025.md",
|
||||||
|
"attachments/IMG_6415.heic",
|
||||||
|
"attachments/Drawing 1.png",
|
||||||
|
"attachments/Drawing.png",
|
||||||
|
"attachments/Image.png",
|
||||||
|
"attachments/Feelings Chat 0528.jpeg",
|
||||||
|
"attachments/Pasted Graphic 2 1.png",
|
||||||
|
"attachments/mapstogpx202101793729.gpx",
|
||||||
|
"attachments/FavoriteLists_iTools_202101793649.json",
|
||||||
|
"attachments/Pasted Graphic 5.png",
|
||||||
|
"attachments/Pasted Graphic 4.png",
|
||||||
|
"attachments/iSpooferLicense.txt",
|
||||||
|
"attachments/Naka.gpx",
|
||||||
|
"attachments/Pasted Graphic 1.pdf",
|
||||||
|
"Apple Notes/Milwaukee 2025 Staff Notes",
|
||||||
|
"Apple Notes/Christina 1",
|
||||||
|
"Apple Notes/Christina"
|
||||||
|
]
|
||||||
|
}
|
||||||
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.2.json
vendored
Normal file
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.2.json
vendored
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"id": "65118307aef94695",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "fb78540f6b0817b8",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "6bd06c473a6df9f7",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Random & To Sort/The Tower.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "The Tower"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "db667fd073afcf6d",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Untitled.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "Untitled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTab": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "vertical"
|
||||||
|
},
|
||||||
|
"left": {
|
||||||
|
"id": "87ef67fcdb70cca7",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "51896b8d031f12a7",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "16c60370ceca95ef",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "file-explorer",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"autoReveal": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-folder-closed",
|
||||||
|
"title": "Files"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "67df3fa6c50b7b8f",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "search",
|
||||||
|
"state": {
|
||||||
|
"query": "",
|
||||||
|
"matchingCase": false,
|
||||||
|
"explainSearch": false,
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical"
|
||||||
|
},
|
||||||
|
"icon": "lucide-search",
|
||||||
|
"title": "Search"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4735c1046deb84d5",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "bookmarks",
|
||||||
|
"state": {},
|
||||||
|
"icon": "lucide-bookmark",
|
||||||
|
"title": "Bookmarks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"id": "fa8d807905c5f186",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "15acd1bca30e4e69",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "ec633bee723e26ed",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "backlink",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Untitled.md",
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": "",
|
||||||
|
"backlinkCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-coming-in",
|
||||||
|
"title": "Backlinks for Untitled"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "76553812ae09d02a",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outgoing-link",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md",
|
||||||
|
"linksCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-going-out",
|
||||||
|
"title": "Outgoing links from Welcome"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "a90689d024131f8e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "tag",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "frequency",
|
||||||
|
"useHierarchy": true
|
||||||
|
},
|
||||||
|
"icon": "lucide-tags",
|
||||||
|
"title": "Tags"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b05875d99c295b3e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outline",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md"
|
||||||
|
},
|
||||||
|
"icon": "lucide-list",
|
||||||
|
"title": "Outline of Welcome"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"left-ribbon": {
|
||||||
|
"hiddenItems": {
|
||||||
|
"bases:Create new base": false,
|
||||||
|
"switcher:Open quick switcher": false,
|
||||||
|
"graph:Open graph view": false,
|
||||||
|
"canvas:Create new canvas": false,
|
||||||
|
"daily-notes:Open today's daily note": false,
|
||||||
|
"templates:Insert template": false,
|
||||||
|
"command-palette:Open command palette": false,
|
||||||
|
"obsidian-importer:Open Importer": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": "db667fd073afcf6d",
|
||||||
|
"lastOpenFiles": [
|
||||||
|
"Home Setup/Used Ports Synology Server.md",
|
||||||
|
"Christina/Feelings Conversations/Untitled.md",
|
||||||
|
"Icon\r",
|
||||||
|
"Apple Notes/Gift ideas ChristmasBirthday.md",
|
||||||
|
"Random & To Sort/The Tower.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Talks - May 10 2025.md",
|
||||||
|
"Christina/Feelings Conversations",
|
||||||
|
"Apple Notes/-250.md",
|
||||||
|
"Apple Notes/- httpswrapbootstrap.comthememonarch-admin-responsive-angularjs….md",
|
||||||
|
"Apple Notes/______ earli-isasmchdoes lanes lashed mmy..md",
|
||||||
|
"Apple Notes/Christina 1/Christina Happy Mothers Day!.md",
|
||||||
|
"Apple Notes/Christina 1/age0-14& !shiny& !shadow& !legendary& !mythical& !lucky& !hatched….md",
|
||||||
|
"Apple Notes/Christina 1/!+mime& !+togep& !+burm& !+riolu& !+larv& !+chime& !+happ& !+sable….md",
|
||||||
|
"Apple Notes/Animal Crossing/Ribbot.md",
|
||||||
|
"attachments/100 1.png",
|
||||||
|
"Apple Notes/Animal Crossing/Retro Action Items.md",
|
||||||
|
"Apple Notes/Animal Crossing/Looking for 10NMT per run, OR Real redd artsculptures, OR 500k bells….md",
|
||||||
|
"Apple Notes/Animal Crossing/-3 Islanders, you will only use 2. -All three have to have a plot….md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 6 2026.md",
|
||||||
|
"Apple Notes/13.99+10.99+10.99+2.79 = 38.76.md",
|
||||||
|
"Apple Notes/Greg Feelings - Dec 4 2025.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 2 2025.md",
|
||||||
|
"Apple Notes/Charlie advocating.md",
|
||||||
|
"Apple Notes/Most password is.md",
|
||||||
|
"Apple Notes/I have worked with the people below and they can attest to my work….md",
|
||||||
|
"Apple Notes/Parking.md",
|
||||||
|
"attachments/IMG_1115.jpeg",
|
||||||
|
"Apple Notes/New Note 20.md",
|
||||||
|
"Apple Notes/age0-120 &!legendary &!mythical &!ultra beasts &!shiny &!4 &!xxl….md",
|
||||||
|
"attachments/Drawing 2.png",
|
||||||
|
"Apple Notes/Home events.md",
|
||||||
|
"attachments/IMG_6415.heic",
|
||||||
|
"attachments/Drawing 1.png",
|
||||||
|
"attachments/Drawing.png",
|
||||||
|
"attachments/Image.png",
|
||||||
|
"attachments/Feelings Chat 0528.jpeg",
|
||||||
|
"attachments/Pasted Graphic 2 1.png",
|
||||||
|
"attachments/mapstogpx202101793729.gpx",
|
||||||
|
"attachments/FavoriteLists_iTools_202101793649.json",
|
||||||
|
"attachments/Pasted Graphic 5.png",
|
||||||
|
"attachments/Pasted Graphic 4.png",
|
||||||
|
"attachments/iSpooferLicense.txt",
|
||||||
|
"attachments/Naka.gpx",
|
||||||
|
"attachments/Pasted Graphic 1.pdf",
|
||||||
|
"Apple Notes/Milwaukee 2025 Staff Notes",
|
||||||
|
"Apple Notes/Christina 1"
|
||||||
|
]
|
||||||
|
}
|
||||||
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.3.json
vendored
Normal file
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.3.json
vendored
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"id": "65118307aef94695",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "fb78540f6b0817b8",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "6bd06c473a6df9f7",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Random & To Sort/The Tower.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "The Tower"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "db667fd073afcf6d",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Christina Feelings - Jan 8 2025.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "Christina Feelings - Jan 8 2025"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTab": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "vertical"
|
||||||
|
},
|
||||||
|
"left": {
|
||||||
|
"id": "87ef67fcdb70cca7",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "51896b8d031f12a7",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "16c60370ceca95ef",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "file-explorer",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"autoReveal": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-folder-closed",
|
||||||
|
"title": "Files"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "67df3fa6c50b7b8f",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "search",
|
||||||
|
"state": {
|
||||||
|
"query": "",
|
||||||
|
"matchingCase": false,
|
||||||
|
"explainSearch": false,
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical"
|
||||||
|
},
|
||||||
|
"icon": "lucide-search",
|
||||||
|
"title": "Search"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4735c1046deb84d5",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "bookmarks",
|
||||||
|
"state": {},
|
||||||
|
"icon": "lucide-bookmark",
|
||||||
|
"title": "Bookmarks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"id": "fa8d807905c5f186",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "15acd1bca30e4e69",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "ec633bee723e26ed",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "backlink",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Christina Feelings - Jan 8 2025.md",
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": "",
|
||||||
|
"backlinkCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-coming-in",
|
||||||
|
"title": "Backlinks for Christina Feelings - Jan 8 2025"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "76553812ae09d02a",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outgoing-link",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md",
|
||||||
|
"linksCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-going-out",
|
||||||
|
"title": "Outgoing links from Welcome"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "a90689d024131f8e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "tag",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "frequency",
|
||||||
|
"useHierarchy": true
|
||||||
|
},
|
||||||
|
"icon": "lucide-tags",
|
||||||
|
"title": "Tags"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b05875d99c295b3e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outline",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md"
|
||||||
|
},
|
||||||
|
"icon": "lucide-list",
|
||||||
|
"title": "Outline of Welcome"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"left-ribbon": {
|
||||||
|
"hiddenItems": {
|
||||||
|
"bases:Create new base": false,
|
||||||
|
"switcher:Open quick switcher": false,
|
||||||
|
"graph:Open graph view": false,
|
||||||
|
"canvas:Create new canvas": false,
|
||||||
|
"daily-notes:Open today's daily note": false,
|
||||||
|
"templates:Insert template": false,
|
||||||
|
"command-palette:Open command palette": false,
|
||||||
|
"obsidian-importer:Open Importer": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": "db667fd073afcf6d",
|
||||||
|
"lastOpenFiles": [
|
||||||
|
"Home Setup/Used Ports Synology Server.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Jan 8 2025.md",
|
||||||
|
"Icon\r",
|
||||||
|
"Apple Notes/Gift ideas ChristmasBirthday.md",
|
||||||
|
"Random & To Sort/The Tower.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Talks - May 10 2025.md",
|
||||||
|
"Christina/Feelings Conversations",
|
||||||
|
"Apple Notes/-250.md",
|
||||||
|
"Apple Notes/- httpswrapbootstrap.comthememonarch-admin-responsive-angularjs….md",
|
||||||
|
"Apple Notes/______ earli-isasmchdoes lanes lashed mmy..md",
|
||||||
|
"Apple Notes/Christina 1/Christina Happy Mothers Day!.md",
|
||||||
|
"Apple Notes/Christina 1/age0-14& !shiny& !shadow& !legendary& !mythical& !lucky& !hatched….md",
|
||||||
|
"Apple Notes/Christina 1/!+mime& !+togep& !+burm& !+riolu& !+larv& !+chime& !+happ& !+sable….md",
|
||||||
|
"Apple Notes/Animal Crossing/Ribbot.md",
|
||||||
|
"attachments/100 1.png",
|
||||||
|
"Apple Notes/Animal Crossing/Retro Action Items.md",
|
||||||
|
"Apple Notes/Animal Crossing/Looking for 10NMT per run, OR Real redd artsculptures, OR 500k bells….md",
|
||||||
|
"Apple Notes/Animal Crossing/-3 Islanders, you will only use 2. -All three have to have a plot….md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 6 2026.md",
|
||||||
|
"Apple Notes/13.99+10.99+10.99+2.79 = 38.76.md",
|
||||||
|
"Apple Notes/Greg Feelings - Dec 4 2025.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 2 2025.md",
|
||||||
|
"Apple Notes/Charlie advocating.md",
|
||||||
|
"Apple Notes/Most password is.md",
|
||||||
|
"Apple Notes/I have worked with the people below and they can attest to my work….md",
|
||||||
|
"Apple Notes/Parking.md",
|
||||||
|
"attachments/IMG_1115.jpeg",
|
||||||
|
"Apple Notes/New Note 20.md",
|
||||||
|
"Apple Notes/age0-120 &!legendary &!mythical &!ultra beasts &!shiny &!4 &!xxl….md",
|
||||||
|
"attachments/Drawing 2.png",
|
||||||
|
"Apple Notes/Home events.md",
|
||||||
|
"attachments/IMG_6415.heic",
|
||||||
|
"attachments/Drawing 1.png",
|
||||||
|
"attachments/Drawing.png",
|
||||||
|
"attachments/Image.png",
|
||||||
|
"attachments/Feelings Chat 0528.jpeg",
|
||||||
|
"attachments/Pasted Graphic 2 1.png",
|
||||||
|
"attachments/mapstogpx202101793729.gpx",
|
||||||
|
"attachments/FavoriteLists_iTools_202101793649.json",
|
||||||
|
"attachments/Pasted Graphic 5.png",
|
||||||
|
"attachments/Pasted Graphic 4.png",
|
||||||
|
"attachments/iSpooferLicense.txt",
|
||||||
|
"attachments/Naka.gpx",
|
||||||
|
"attachments/Pasted Graphic 1.pdf",
|
||||||
|
"Apple Notes/Milwaukee 2025 Staff Notes",
|
||||||
|
"Apple Notes/Christina 1"
|
||||||
|
]
|
||||||
|
}
|
||||||
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.4.json
vendored
Normal file
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.4.json
vendored
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"id": "65118307aef94695",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "fb78540f6b0817b8",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "6bd06c473a6df9f7",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Random & To Sort/The Tower.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "The Tower"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "db667fd073afcf6d",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Christina Feelings - Jan 8 2026.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "Christina Feelings - Jan 8 2026"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTab": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "vertical"
|
||||||
|
},
|
||||||
|
"left": {
|
||||||
|
"id": "87ef67fcdb70cca7",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "51896b8d031f12a7",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "16c60370ceca95ef",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "file-explorer",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"autoReveal": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-folder-closed",
|
||||||
|
"title": "Files"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "67df3fa6c50b7b8f",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "search",
|
||||||
|
"state": {
|
||||||
|
"query": "",
|
||||||
|
"matchingCase": false,
|
||||||
|
"explainSearch": false,
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical"
|
||||||
|
},
|
||||||
|
"icon": "lucide-search",
|
||||||
|
"title": "Search"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4735c1046deb84d5",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "bookmarks",
|
||||||
|
"state": {},
|
||||||
|
"icon": "lucide-bookmark",
|
||||||
|
"title": "Bookmarks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"id": "fa8d807905c5f186",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "15acd1bca30e4e69",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "ec633bee723e26ed",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "backlink",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Christina Feelings - Jan 8 2026.md",
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": "",
|
||||||
|
"backlinkCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-coming-in",
|
||||||
|
"title": "Backlinks for Christina Feelings - Jan 8 2026"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "76553812ae09d02a",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outgoing-link",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md",
|
||||||
|
"linksCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-going-out",
|
||||||
|
"title": "Outgoing links from Welcome"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "a90689d024131f8e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "tag",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "frequency",
|
||||||
|
"useHierarchy": true
|
||||||
|
},
|
||||||
|
"icon": "lucide-tags",
|
||||||
|
"title": "Tags"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b05875d99c295b3e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outline",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md"
|
||||||
|
},
|
||||||
|
"icon": "lucide-list",
|
||||||
|
"title": "Outline of Welcome"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"left-ribbon": {
|
||||||
|
"hiddenItems": {
|
||||||
|
"bases:Create new base": false,
|
||||||
|
"switcher:Open quick switcher": false,
|
||||||
|
"graph:Open graph view": false,
|
||||||
|
"canvas:Create new canvas": false,
|
||||||
|
"daily-notes:Open today's daily note": false,
|
||||||
|
"templates:Insert template": false,
|
||||||
|
"command-palette:Open command palette": false,
|
||||||
|
"obsidian-importer:Open Importer": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": "db667fd073afcf6d",
|
||||||
|
"lastOpenFiles": [
|
||||||
|
"Home Setup/Used Ports Synology Server.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Jan 8 2026.md",
|
||||||
|
"Icon\r",
|
||||||
|
"Apple Notes/Gift ideas ChristmasBirthday.md",
|
||||||
|
"Random & To Sort/The Tower.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Talks - May 10 2025.md",
|
||||||
|
"Christina/Feelings Conversations",
|
||||||
|
"Apple Notes/-250.md",
|
||||||
|
"Apple Notes/- httpswrapbootstrap.comthememonarch-admin-responsive-angularjs….md",
|
||||||
|
"Apple Notes/______ earli-isasmchdoes lanes lashed mmy..md",
|
||||||
|
"Apple Notes/Christina 1/Christina Happy Mothers Day!.md",
|
||||||
|
"Apple Notes/Christina 1/age0-14& !shiny& !shadow& !legendary& !mythical& !lucky& !hatched….md",
|
||||||
|
"Apple Notes/Christina 1/!+mime& !+togep& !+burm& !+riolu& !+larv& !+chime& !+happ& !+sable….md",
|
||||||
|
"Apple Notes/Animal Crossing/Ribbot.md",
|
||||||
|
"attachments/100 1.png",
|
||||||
|
"Apple Notes/Animal Crossing/Retro Action Items.md",
|
||||||
|
"Apple Notes/Animal Crossing/Looking for 10NMT per run, OR Real redd artsculptures, OR 500k bells….md",
|
||||||
|
"Apple Notes/Animal Crossing/-3 Islanders, you will only use 2. -All three have to have a plot….md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 6 2026.md",
|
||||||
|
"Apple Notes/13.99+10.99+10.99+2.79 = 38.76.md",
|
||||||
|
"Apple Notes/Greg Feelings - Dec 4 2025.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 2 2025.md",
|
||||||
|
"Apple Notes/Charlie advocating.md",
|
||||||
|
"Apple Notes/Most password is.md",
|
||||||
|
"Apple Notes/I have worked with the people below and they can attest to my work….md",
|
||||||
|
"Apple Notes/Parking.md",
|
||||||
|
"attachments/IMG_1115.jpeg",
|
||||||
|
"Apple Notes/New Note 20.md",
|
||||||
|
"Apple Notes/age0-120 &!legendary &!mythical &!ultra beasts &!shiny &!4 &!xxl….md",
|
||||||
|
"attachments/Drawing 2.png",
|
||||||
|
"Apple Notes/Home events.md",
|
||||||
|
"attachments/IMG_6415.heic",
|
||||||
|
"attachments/Drawing 1.png",
|
||||||
|
"attachments/Drawing.png",
|
||||||
|
"attachments/Image.png",
|
||||||
|
"attachments/Feelings Chat 0528.jpeg",
|
||||||
|
"attachments/Pasted Graphic 2 1.png",
|
||||||
|
"attachments/mapstogpx202101793729.gpx",
|
||||||
|
"attachments/FavoriteLists_iTools_202101793649.json",
|
||||||
|
"attachments/Pasted Graphic 5.png",
|
||||||
|
"attachments/Pasted Graphic 4.png",
|
||||||
|
"attachments/iSpooferLicense.txt",
|
||||||
|
"attachments/Naka.gpx",
|
||||||
|
"attachments/Pasted Graphic 1.pdf",
|
||||||
|
"Apple Notes/Milwaukee 2025 Staff Notes",
|
||||||
|
"Apple Notes/Christina 1"
|
||||||
|
]
|
||||||
|
}
|
||||||
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.5.json
vendored
Normal file
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.5.json
vendored
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"id": "65118307aef94695",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "fb78540f6b0817b8",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "6bd06c473a6df9f7",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Random & To Sort/The Tower.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "The Tower"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "db667fd073afcf6d",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Untitled.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "Untitled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTab": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "vertical"
|
||||||
|
},
|
||||||
|
"left": {
|
||||||
|
"id": "87ef67fcdb70cca7",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "51896b8d031f12a7",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "16c60370ceca95ef",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "file-explorer",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"autoReveal": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-folder-closed",
|
||||||
|
"title": "Files"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "67df3fa6c50b7b8f",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "search",
|
||||||
|
"state": {
|
||||||
|
"query": "",
|
||||||
|
"matchingCase": false,
|
||||||
|
"explainSearch": false,
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical"
|
||||||
|
},
|
||||||
|
"icon": "lucide-search",
|
||||||
|
"title": "Search"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4735c1046deb84d5",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "bookmarks",
|
||||||
|
"state": {},
|
||||||
|
"icon": "lucide-bookmark",
|
||||||
|
"title": "Bookmarks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"id": "fa8d807905c5f186",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "15acd1bca30e4e69",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "ec633bee723e26ed",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "backlink",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Untitled.md",
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": "",
|
||||||
|
"backlinkCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-coming-in",
|
||||||
|
"title": "Backlinks for Untitled"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "76553812ae09d02a",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outgoing-link",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md",
|
||||||
|
"linksCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-going-out",
|
||||||
|
"title": "Outgoing links from Welcome"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "a90689d024131f8e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "tag",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "frequency",
|
||||||
|
"useHierarchy": true
|
||||||
|
},
|
||||||
|
"icon": "lucide-tags",
|
||||||
|
"title": "Tags"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b05875d99c295b3e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outline",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md"
|
||||||
|
},
|
||||||
|
"icon": "lucide-list",
|
||||||
|
"title": "Outline of Welcome"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"left-ribbon": {
|
||||||
|
"hiddenItems": {
|
||||||
|
"bases:Create new base": false,
|
||||||
|
"switcher:Open quick switcher": false,
|
||||||
|
"graph:Open graph view": false,
|
||||||
|
"canvas:Create new canvas": false,
|
||||||
|
"daily-notes:Open today's daily note": false,
|
||||||
|
"templates:Insert template": false,
|
||||||
|
"command-palette:Open command palette": false,
|
||||||
|
"obsidian-importer:Open Importer": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": "db667fd073afcf6d",
|
||||||
|
"lastOpenFiles": [
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Jan 8 2026.md",
|
||||||
|
"Christina/Feelings Conversations/Untitled.md",
|
||||||
|
"Home Setup/Used Ports Synology Server.md",
|
||||||
|
"Icon\r",
|
||||||
|
"Apple Notes/Gift ideas ChristmasBirthday.md",
|
||||||
|
"Random & To Sort/The Tower.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Talks - May 10 2025.md",
|
||||||
|
"Christina/Feelings Conversations",
|
||||||
|
"Apple Notes/-250.md",
|
||||||
|
"Apple Notes/- httpswrapbootstrap.comthememonarch-admin-responsive-angularjs….md",
|
||||||
|
"Apple Notes/______ earli-isasmchdoes lanes lashed mmy..md",
|
||||||
|
"Apple Notes/Christina 1/Christina Happy Mothers Day!.md",
|
||||||
|
"Apple Notes/Christina 1/age0-14& !shiny& !shadow& !legendary& !mythical& !lucky& !hatched….md",
|
||||||
|
"Apple Notes/Christina 1/!+mime& !+togep& !+burm& !+riolu& !+larv& !+chime& !+happ& !+sable….md",
|
||||||
|
"Apple Notes/Animal Crossing/Ribbot.md",
|
||||||
|
"attachments/100 1.png",
|
||||||
|
"Apple Notes/Animal Crossing/Retro Action Items.md",
|
||||||
|
"Apple Notes/Animal Crossing/Looking for 10NMT per run, OR Real redd artsculptures, OR 500k bells….md",
|
||||||
|
"Apple Notes/Animal Crossing/-3 Islanders, you will only use 2. -All three have to have a plot….md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 6 2026.md",
|
||||||
|
"Apple Notes/13.99+10.99+10.99+2.79 = 38.76.md",
|
||||||
|
"Apple Notes/Greg Feelings - Dec 4 2025.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 2 2025.md",
|
||||||
|
"Apple Notes/Charlie advocating.md",
|
||||||
|
"Apple Notes/Most password is.md",
|
||||||
|
"Apple Notes/I have worked with the people below and they can attest to my work….md",
|
||||||
|
"Apple Notes/Parking.md",
|
||||||
|
"attachments/IMG_1115.jpeg",
|
||||||
|
"Apple Notes/New Note 20.md",
|
||||||
|
"Apple Notes/age0-120 &!legendary &!mythical &!ultra beasts &!shiny &!4 &!xxl….md",
|
||||||
|
"attachments/Drawing 2.png",
|
||||||
|
"attachments/IMG_6415.heic",
|
||||||
|
"attachments/Drawing 1.png",
|
||||||
|
"attachments/Drawing.png",
|
||||||
|
"attachments/Image.png",
|
||||||
|
"attachments/Feelings Chat 0528.jpeg",
|
||||||
|
"attachments/Pasted Graphic 2 1.png",
|
||||||
|
"attachments/mapstogpx202101793729.gpx",
|
||||||
|
"attachments/FavoriteLists_iTools_202101793649.json",
|
||||||
|
"attachments/Pasted Graphic 5.png",
|
||||||
|
"attachments/Pasted Graphic 4.png",
|
||||||
|
"attachments/iSpooferLicense.txt",
|
||||||
|
"attachments/Naka.gpx",
|
||||||
|
"attachments/Pasted Graphic 1.pdf",
|
||||||
|
"Apple Notes/Milwaukee 2025 Staff Notes",
|
||||||
|
"Apple Notes/Christina 1"
|
||||||
|
]
|
||||||
|
}
|
||||||
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.6.json
vendored
Normal file
231
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.6.json
vendored
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"id": "65118307aef94695",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "fb78540f6b0817b8",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "6bd06c473a6df9f7",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Random & To Sort/The Tower.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "The Tower"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "db667fd073afcf6d",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Christina Feelings - Dec 11 2025.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "Christina Feelings - Dec 11 2025"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTab": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "vertical"
|
||||||
|
},
|
||||||
|
"left": {
|
||||||
|
"id": "87ef67fcdb70cca7",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "51896b8d031f12a7",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "16c60370ceca95ef",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "file-explorer",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"autoReveal": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-folder-closed",
|
||||||
|
"title": "Files"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "67df3fa6c50b7b8f",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "search",
|
||||||
|
"state": {
|
||||||
|
"query": "",
|
||||||
|
"matchingCase": false,
|
||||||
|
"explainSearch": false,
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical"
|
||||||
|
},
|
||||||
|
"icon": "lucide-search",
|
||||||
|
"title": "Search"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4735c1046deb84d5",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "bookmarks",
|
||||||
|
"state": {},
|
||||||
|
"icon": "lucide-bookmark",
|
||||||
|
"title": "Bookmarks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"id": "fa8d807905c5f186",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "15acd1bca30e4e69",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "ec633bee723e26ed",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "backlink",
|
||||||
|
"state": {
|
||||||
|
"file": "Christina/Feelings Conversations/Christina Feelings - Dec 11 2025.md",
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": "",
|
||||||
|
"backlinkCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-coming-in",
|
||||||
|
"title": "Backlinks for Christina Feelings - Dec 11 2025"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "76553812ae09d02a",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outgoing-link",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md",
|
||||||
|
"linksCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-going-out",
|
||||||
|
"title": "Outgoing links from Welcome"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "a90689d024131f8e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "tag",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "frequency",
|
||||||
|
"useHierarchy": true
|
||||||
|
},
|
||||||
|
"icon": "lucide-tags",
|
||||||
|
"title": "Tags"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b05875d99c295b3e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outline",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md"
|
||||||
|
},
|
||||||
|
"icon": "lucide-list",
|
||||||
|
"title": "Outline of Welcome"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"left-ribbon": {
|
||||||
|
"hiddenItems": {
|
||||||
|
"bases:Create new base": false,
|
||||||
|
"switcher:Open quick switcher": false,
|
||||||
|
"graph:Open graph view": false,
|
||||||
|
"canvas:Create new canvas": false,
|
||||||
|
"daily-notes:Open today's daily note": false,
|
||||||
|
"templates:Insert template": false,
|
||||||
|
"command-palette:Open command palette": false,
|
||||||
|
"obsidian-importer:Open Importer": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": "db667fd073afcf6d",
|
||||||
|
"lastOpenFiles": [
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Jan 8 2026.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 11 2025.md",
|
||||||
|
"Home Setup/Used Ports Synology Server.md",
|
||||||
|
"Icon\r",
|
||||||
|
"Apple Notes/Gift ideas ChristmasBirthday.md",
|
||||||
|
"Random & To Sort/The Tower.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Talks - May 10 2025.md",
|
||||||
|
"Christina/Feelings Conversations",
|
||||||
|
"Apple Notes/-250.md",
|
||||||
|
"Apple Notes/- httpswrapbootstrap.comthememonarch-admin-responsive-angularjs….md",
|
||||||
|
"Apple Notes/______ earli-isasmchdoes lanes lashed mmy..md",
|
||||||
|
"Apple Notes/Christina 1/Christina Happy Mothers Day!.md",
|
||||||
|
"Apple Notes/Christina 1/age0-14& !shiny& !shadow& !legendary& !mythical& !lucky& !hatched….md",
|
||||||
|
"Apple Notes/Christina 1/!+mime& !+togep& !+burm& !+riolu& !+larv& !+chime& !+happ& !+sable….md",
|
||||||
|
"Apple Notes/Animal Crossing/Ribbot.md",
|
||||||
|
"attachments/100 1.png",
|
||||||
|
"Apple Notes/Animal Crossing/Retro Action Items.md",
|
||||||
|
"Apple Notes/Animal Crossing/Looking for 10NMT per run, OR Real redd artsculptures, OR 500k bells….md",
|
||||||
|
"Apple Notes/Animal Crossing/-3 Islanders, you will only use 2. -All three have to have a plot….md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 6 2026.md",
|
||||||
|
"Apple Notes/13.99+10.99+10.99+2.79 = 38.76.md",
|
||||||
|
"Apple Notes/Greg Feelings - Dec 4 2025.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 2 2025.md",
|
||||||
|
"Apple Notes/Charlie advocating.md",
|
||||||
|
"Apple Notes/Most password is.md",
|
||||||
|
"Apple Notes/I have worked with the people below and they can attest to my work….md",
|
||||||
|
"Apple Notes/Parking.md",
|
||||||
|
"attachments/IMG_1115.jpeg",
|
||||||
|
"Apple Notes/New Note 20.md",
|
||||||
|
"Apple Notes/age0-120 &!legendary &!mythical &!ultra beasts &!shiny &!4 &!xxl….md",
|
||||||
|
"attachments/Drawing 2.png",
|
||||||
|
"attachments/IMG_6415.heic",
|
||||||
|
"attachments/Drawing 1.png",
|
||||||
|
"attachments/Drawing.png",
|
||||||
|
"attachments/Image.png",
|
||||||
|
"attachments/Feelings Chat 0528.jpeg",
|
||||||
|
"attachments/Pasted Graphic 2 1.png",
|
||||||
|
"attachments/mapstogpx202101793729.gpx",
|
||||||
|
"attachments/FavoriteLists_iTools_202101793649.json",
|
||||||
|
"attachments/Pasted Graphic 5.png",
|
||||||
|
"attachments/Pasted Graphic 4.png",
|
||||||
|
"attachments/iSpooferLicense.txt",
|
||||||
|
"attachments/Naka.gpx",
|
||||||
|
"attachments/Pasted Graphic 1.pdf",
|
||||||
|
"Apple Notes/Milwaukee 2025 Staff Notes",
|
||||||
|
"Apple Notes/Christina 1"
|
||||||
|
]
|
||||||
|
}
|
||||||
228
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.json
vendored
Normal file
228
docs/projects/memorypalace/.sync/Archive/.obsidian/workspace.json
vendored
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
{
|
||||||
|
"main": {
|
||||||
|
"id": "65118307aef94695",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "fb78540f6b0817b8",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "6bd06c473a6df9f7",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "markdown",
|
||||||
|
"state": {
|
||||||
|
"file": "Random & To Sort/The Tower.md",
|
||||||
|
"mode": "source",
|
||||||
|
"source": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-file",
|
||||||
|
"title": "The Tower"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "db667fd073afcf6d",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "release-notes",
|
||||||
|
"state": {
|
||||||
|
"currentVersion": "1.11.4"
|
||||||
|
},
|
||||||
|
"icon": "lucide-book-up",
|
||||||
|
"title": "Release Notes 1.11.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentTab": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "vertical"
|
||||||
|
},
|
||||||
|
"left": {
|
||||||
|
"id": "87ef67fcdb70cca7",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "51896b8d031f12a7",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "16c60370ceca95ef",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "file-explorer",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"autoReveal": false
|
||||||
|
},
|
||||||
|
"icon": "lucide-folder-closed",
|
||||||
|
"title": "Files"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "67df3fa6c50b7b8f",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "search",
|
||||||
|
"state": {
|
||||||
|
"query": "",
|
||||||
|
"matchingCase": false,
|
||||||
|
"explainSearch": false,
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical"
|
||||||
|
},
|
||||||
|
"icon": "lucide-search",
|
||||||
|
"title": "Search"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4735c1046deb84d5",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "bookmarks",
|
||||||
|
"state": {},
|
||||||
|
"icon": "lucide-bookmark",
|
||||||
|
"title": "Bookmarks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"id": "fa8d807905c5f186",
|
||||||
|
"type": "split",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "15acd1bca30e4e69",
|
||||||
|
"type": "tabs",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "ec633bee723e26ed",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "backlink",
|
||||||
|
"state": {
|
||||||
|
"collapseAll": false,
|
||||||
|
"extraContext": false,
|
||||||
|
"sortOrder": "alphabetical",
|
||||||
|
"showSearch": false,
|
||||||
|
"searchQuery": "",
|
||||||
|
"backlinkCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-coming-in",
|
||||||
|
"title": "Backlinks"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "76553812ae09d02a",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outgoing-link",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md",
|
||||||
|
"linksCollapsed": false,
|
||||||
|
"unlinkedCollapsed": true
|
||||||
|
},
|
||||||
|
"icon": "links-going-out",
|
||||||
|
"title": "Outgoing links from Welcome"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "a90689d024131f8e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "tag",
|
||||||
|
"state": {
|
||||||
|
"sortOrder": "frequency",
|
||||||
|
"useHierarchy": true
|
||||||
|
},
|
||||||
|
"icon": "lucide-tags",
|
||||||
|
"title": "Tags"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b05875d99c295b3e",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "outline",
|
||||||
|
"state": {
|
||||||
|
"file": "Welcome.md"
|
||||||
|
},
|
||||||
|
"icon": "lucide-list",
|
||||||
|
"title": "Outline of Welcome"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"direction": "horizontal",
|
||||||
|
"width": 300
|
||||||
|
},
|
||||||
|
"left-ribbon": {
|
||||||
|
"hiddenItems": {
|
||||||
|
"bases:Create new base": false,
|
||||||
|
"switcher:Open quick switcher": false,
|
||||||
|
"graph:Open graph view": false,
|
||||||
|
"canvas:Create new canvas": false,
|
||||||
|
"daily-notes:Open today's daily note": false,
|
||||||
|
"templates:Insert template": false,
|
||||||
|
"command-palette:Open command palette": false,
|
||||||
|
"obsidian-importer:Open Importer": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": "16c60370ceca95ef",
|
||||||
|
"lastOpenFiles": [
|
||||||
|
"Icon\r",
|
||||||
|
"Apple Notes/Gift ideas ChristmasBirthday.md",
|
||||||
|
"Random & To Sort/The Tower.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Talks - May 10 2025.md",
|
||||||
|
"Christina/Feelings Conversations",
|
||||||
|
"Apple Notes/-250.md",
|
||||||
|
"Apple Notes/- httpswrapbootstrap.comthememonarch-admin-responsive-angularjs….md",
|
||||||
|
"Apple Notes/______ earli-isasmchdoes lanes lashed mmy..md",
|
||||||
|
"Apple Notes/Christina 1/Christina Happy Mothers Day!.md",
|
||||||
|
"Apple Notes/Christina 1/age0-14& !shiny& !shadow& !legendary& !mythical& !lucky& !hatched….md",
|
||||||
|
"Apple Notes/Christina 1/!+mime& !+togep& !+burm& !+riolu& !+larv& !+chime& !+happ& !+sable….md",
|
||||||
|
"Apple Notes/Animal Crossing/Ribbot.md",
|
||||||
|
"attachments/100 1.png",
|
||||||
|
"Apple Notes/Animal Crossing/Retro Action Items.md",
|
||||||
|
"Apple Notes/Animal Crossing/Looking for 10NMT per run, OR Real redd artsculptures, OR 500k bells….md",
|
||||||
|
"Apple Notes/Animal Crossing/-3 Islanders, you will only use 2. -All three have to have a plot….md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 6 2026.md",
|
||||||
|
"Apple Notes/13.99+10.99+10.99+2.79 = 38.76.md",
|
||||||
|
"Apple Notes/Greg Feelings - Dec 4 2025.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Dec 2 2025.md",
|
||||||
|
"Apple Notes/Charlie advocating.md",
|
||||||
|
"Apple Notes/Most password is.md",
|
||||||
|
"Apple Notes/I have worked with the people below and they can attest to my work….md",
|
||||||
|
"Apple Notes/Parking.md",
|
||||||
|
"attachments/IMG_1115.jpeg",
|
||||||
|
"Apple Notes/New Note 20.md",
|
||||||
|
"Apple Notes/age0-120 &!legendary &!mythical &!ultra beasts &!shiny &!4 &!xxl….md",
|
||||||
|
"attachments/Drawing 2.png",
|
||||||
|
"Apple Notes/Home events.md",
|
||||||
|
"Christina/Feelings Conversations/Christina Feelings - Oct 14 2025.md",
|
||||||
|
"attachments/IMG_6415.heic",
|
||||||
|
"attachments/Drawing 1.png",
|
||||||
|
"attachments/Drawing.png",
|
||||||
|
"attachments/Image.png",
|
||||||
|
"attachments/Feelings Chat 0528.jpeg",
|
||||||
|
"attachments/Pasted Graphic 2 1.png",
|
||||||
|
"attachments/mapstogpx202101793729.gpx",
|
||||||
|
"attachments/FavoriteLists_iTools_202101793649.json",
|
||||||
|
"attachments/Pasted Graphic 5.png",
|
||||||
|
"attachments/Pasted Graphic 4.png",
|
||||||
|
"attachments/iSpooferLicense.txt",
|
||||||
|
"attachments/Naka.gpx",
|
||||||
|
"attachments/Pasted Graphic 1.pdf",
|
||||||
|
"Apple Notes/Milwaukee 2025 Staff Notes",
|
||||||
|
"Apple Notes/Christina 1",
|
||||||
|
"Apple Notes/Christina"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#Christina #Feelings - Talk 5/16/24
|
||||||
|
- [ ] She would appreciate being able to ask questions without me blaming her
|
||||||
|
- [ ] From earlier today
|
||||||
|
- [ ] Sent points she thought pertinent to Alice’s doc apt
|
||||||
|
- [ ] Was following up on those points
|
||||||
|
- [ ] In no way was blaming me just looking for information on Alice’s medical info
|
||||||
|
- [ ] Turned into her feeling blaming her by saying it wasn’t clear to me
|
||||||
|
- [ ] Don’t appreciate the me telling her I gave her all the info and I had no secrets in what I was telling her
|
||||||
|
- [ ] Doesn’t make me feel she can ask questions or follow up on questions that are important to know
|
||||||
|
- [ ] She feels there continues to be a lot of statements made that make her feel blamed
|
||||||
|
- [ ] For example today
|
||||||
|
- [ ] Asked about follow up from questionnaire right away I pulled out phone and said she wasn’t clear
|
||||||
|
- [ ] Feels like garbage trying to figure out information about Alice
|
||||||
|
- [ ] I deflected saying she didn’t give any appreciation
|
||||||
|
- [ ] Leads her to feel like she can’t feel free to ask me about important medical appointments she wasn’t a part of
|
||||||
|
- [ ] Another time feeling blamed today
|
||||||
|
- [ ] Me saying I was following an example she setup
|
||||||
|
- [ ] She felt frustrated and let me know she could look at the way she talked to Alice and she could let me know that she would appreciate me waiting giving time to apologize
|
||||||
|
- [ ] She doesn’t feel I acknowledged what she said and saying i was following your example
|
||||||
|
- [ ] When she tried to bring it back to giving time and space I said she isn’t the main character and that she needed to back down and check how others are feeling
|
||||||
|
- [ ] I needed break if she wouldn’t acknowledge what I shared
|
||||||
|
- [ ] this leads to feel like what she brought up isn’t being addressed and then being blamed for why I did it and then being deflected on
|
||||||
|
- [ ] She feels she was trying to get back to original point that didn’t get addressed
|
||||||
|
- [ ] Feels really frustrating and upsetting to try and talk to me
|
||||||
|
- [ ] She wants to feel like I’m listening g to and trying to understand what I’m saying l to me
|
||||||
|
- [ ] She feels like things she says to me get misinterpreted and that I get defensive but all she is looking for is a little bit of understanding on how she is feeling
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#Christina #Feelings - discussion 8/11/22
|
||||||
|
- [ ] Feeling really hurt
|
||||||
|
- [ ] Can be really unkind when I’m upset
|
||||||
|
- [ ] Doesn’t feel like there is room for her to make mistakes in our relationship
|
||||||
|
- [ ] If she does make a mistake I go out of my way to make her feel as shitty as possible
|
||||||
|
- [ ] Let me know as soon as she was home she was sorry
|
||||||
|
- [ ] While trying to apologize the facial expressions I was making were upsetting
|
||||||
|
- [ ] Wasn’t trying to minimize on it just get me to look how she was being treated
|
||||||
|
- [ ] I was trying to show I cared but I wasn’t going to do it again - seemed cruel and defeating
|
||||||
|
- [ ] ESP if I’m saying I see how hard it’s been
|
||||||
|
- [ ] Why couldn’t she have been given a bit of grace?
|
||||||
|
- [ ] Was a shitty way to act
|
||||||
|
- [ ] Next morning trying to let her know how she felt while I was with Charlie
|
||||||
|
- [ ] Onus is on her to initiate the convo
|
||||||
|
- [ ] Wanted to be heard that she was hurt
|
||||||
|
- [ ] Something like “hey I fell asleep but would sure like what you have to say”
|
||||||
|
- [ ] Feels really shitty when she works so hard for our fam and things that she does for me to be thoughtful
|
||||||
|
- [ ] One mess up and no grace given
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#Christina #Feelings - 2/9/24
|
||||||
|
- [ ] Really disrespected from this morning
|
||||||
|
- [ ] Interrupted her multiple times
|
||||||
|
- [ ] Then when wasn’t ready to share what she said bc it was light hearted and funny
|
||||||
|
- [ ] Took opportunity to talk about it later by asking the kids
|
||||||
|
- [ ] On top of that not responding to her saying I interrupted you multiple times
|
||||||
|
- [ ] I used a rude voice
|
||||||
|
- [ ] Overall this morning really hurt her and made her feel like complete crap
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#Christina #Feelings - 3/20/24
|
||||||
|
- [ ] Making facial expressions when talking to me
|
||||||
|
- [ ] Tone of voice as well
|
||||||
|
- [ ] Not addressing what I am saying before moving on
|
||||||
|
- [ ] Brought up that it seems what I am saying is minimized and don’t feel it was addressed
|
||||||
|
- [ ] Defensive when talking to her and her not waiting 5 seconds to answer
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
| Container | External (We use) | Internal (Docker Uses) | Project |
|
||||||
|
| ---------------------------------------------- | ------------------------------ | --------------------------------------------- | ----------------------------------------------------------------------- |
|
||||||
|
| [[Home Setup/Containers/Bookstack\|Bookstack]] | 6875 | 80 | [[Home Setup/Synology/Container Manager Projects/bookstack\|bookstack]] |
|
||||||
|
| mariadb | | | [[Home Setup/Synology/Container Manager Projects/bookstack\|bookstack]] |
|
||||||
|
| [[Home Setup/Containers/WikiJS\|WikiJS]]-app | 9999 | 3000 | [[Home Setup/Synology/Container Manager Projects/wikijs\|wikijs]] |
|
||||||
|
| [[Home Setup/Containers/WikiJS\|WikiJS]]-db | | | [[Home Setup/Synology/Container Manager Projects/wikijs\|wikijs]] |
|
||||||
|
| [[Speed Test Tracker]] | 8443 (https)<br>8888 (http) | 443/tcp<br>80/tcp | [[speediest-tracker]] |
|
||||||
|
| [[SABNzbd]] | 37070 | 8085/tcp | [[wirecutter]] |
|
||||||
|
| [[Radarr]] | 39095 | 7878/tcp | [[wirecutter]] |
|
||||||
|
| [[Tautulli]] | 38084 | 8181/tcp | [[wirecutter]] |
|
||||||
|
| [[Overseerr]] | 41001 | 5055/tcp | [[wirecutter]] |
|
||||||
|
| [[Prowlarr]] | 39696 | 9696/tcp | [[wirecutter]] |
|
||||||
|
| [[Deluge]] | 39090<br>6881<br>6881<br>39093 | 58846/tcp<br>6881/tcp<br>6881/udp<br>8112/tcp | [[wirecutter]] |
|
||||||
|
| [[Doplarr]] | | | [[wirecutter]] |
|
||||||
|
| [[Sonarr]] | 39092 | 8989/tcp | [[wirecutter]] |
|
||||||
|
| [[Socket Proxy]] | 2375 | 2375/tcp | [[docker-socket-proxy]] |
|
||||||
|
| [[Invoice Ninja]]-nginx | 8080<br>8081 | 443/tcp<br>80/tcp | [[invoice-ninja]] |
|
||||||
|
| [[Invoice Ninja]]-app | | | [[invoice-ninja]] |
|
||||||
|
| [[Invoice Ninja]]-db | | | [[invoice-ninja]] |
|
||||||
1
docs/projects/memorypalace/.sync/ID
Normal file
1
docs/projects/memorypalace/.sync/ID
Normal file
@@ -0,0 +1 @@
|
|||||||
|
DÕ!,I,'剹8¡tꤪ‹>03É4Qêó
|
||||||
54
docs/projects/memorypalace/.sync/IgnoreList
Normal file
54
docs/projects/memorypalace/.sync/IgnoreList
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# IgnoreList is a UTF-8 encoded .txt file that helps you specify single files, paths and rules
|
||||||
|
# for ignoring during the synchronization job. It supports "?" and "*" wildcard symbols.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# OS generated files #
|
||||||
|
$RECYCLE.BIN
|
||||||
|
$Recycle.Bin
|
||||||
|
System Volume Information
|
||||||
|
ehthumbs.db
|
||||||
|
desktop.ini
|
||||||
|
Thumbs.db
|
||||||
|
lost+found
|
||||||
|
.DocumentRevisions-V100
|
||||||
|
.TemporaryItems
|
||||||
|
.fseventsd
|
||||||
|
.icloud
|
||||||
|
.iCloud
|
||||||
|
.DS_Store
|
||||||
|
.DS_Store?
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
.Trash-*
|
||||||
|
.trashed-*
|
||||||
|
~*
|
||||||
|
*~
|
||||||
|
.~lock.*
|
||||||
|
*.part
|
||||||
|
*.filepart
|
||||||
|
.csync_journal.db
|
||||||
|
.csync_journal.db.tmp
|
||||||
|
*.swn
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*.crdownload
|
||||||
|
.@__thumb
|
||||||
|
.thumbnails
|
||||||
|
._*
|
||||||
|
*.tmp
|
||||||
|
*.tmp.chck
|
||||||
|
.dropbox
|
||||||
|
.dropbox.attr
|
||||||
|
.dropbox.cache
|
||||||
|
.streams
|
||||||
|
.caches
|
||||||
|
.Statuses
|
||||||
|
.teamdrive
|
||||||
|
.SynologyWorkingDirectory
|
||||||
|
@eaDir
|
||||||
|
@SynoResource
|
||||||
|
#SynoRecycle
|
||||||
|
#snapshot
|
||||||
|
#recycle
|
||||||
|
.!@#$recycle
|
||||||
|
DfsrPrivate
|
||||||
8
docs/projects/memorypalace/.sync/StreamsList
Normal file
8
docs/projects/memorypalace/.sync/StreamsList
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# StreamsList is a UTF-8 encoded .txt file that helps you specify alternate streams,
|
||||||
|
# xattrs and resource forks white list. It supports "?" and "*" wildcard symbols.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
com.apple.metadata:_kMDItemUserTags
|
||||||
|
com.apple.ResourceFork
|
||||||
|
com.apple.metadata:kMDItemFinderComment
|
||||||
0
docs/projects/memorypalace/.sync/root_acl_entry
Normal file
0
docs/projects/memorypalace/.sync/root_acl_entry
Normal file
21
docs/projects/memorypalace/Apple Notes/!-- home.html --.md
Normal file
21
docs/projects/memorypalace/Apple Notes/!-- home.html --.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<span style="color:#000ff;"><div ng-controller="loginController"></span>
|
||||||
|
<span style="color:#000ff;"><div ng-switch on="isUserLoggedIn()"></span>
|
||||||
|
<span style="color:#000ff;"><div ng-switch-when="false"></span>
|
||||||
|
<span style="color:#000ff;"><div class="jumbotron text-center"></span>
|
||||||
|
<span style="color:#000ff;"><h1>Login</h1></span>
|
||||||
|
<span style="color:#000ff;"><form ng-submit="login()"></span>
|
||||||
|
<span style="color:#000ff;"><input type="text" class="input-medium" placeholder="User Name" ng-model="username"></span>
|
||||||
|
<span style="color:#000ff;"><input type="password" class="input-medium" placeholder="Password" ng-model="password"></span>
|
||||||
|
<span style="color:#000ff;"><button id="loginButton" class="btn">Login</button></span>
|
||||||
|
<span style="color:#000ff;"></form></span>
|
||||||
|
<span style="color:#000ff;"></div></span>
|
||||||
|
<span style="color:#000ff;"></div></span>
|
||||||
|
<span style="color:#000ff;"><div ng-switch-when="true"></span>
|
||||||
|
<span style="color:#000ff;"><div class="jumbotron text-center"></span>
|
||||||
|
<span style="color:#000ff;"><h1>Logged In</h1></span>
|
||||||
|
<span style="color:#000ff;"><div>Welcome, {{user.firstname}} {{user.lastname}}! You are already logged in. Do you want to log out?</div></span>
|
||||||
|
<span style="color:#000ff;"><button id="loginButton" class="btn" ng-click="logout()">Logout</button></span>
|
||||||
|
<span style="color:#000ff;"></div></span>
|
||||||
|
<span style="color:#000ff;"></div></span>
|
||||||
|
<span style="color:#000ff;"></div></span>
|
||||||
|
<span style="color:#000ff;"></div></span>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
!4*&!shiny&!mime&!+togep&age0-320&!burm&!hound&!pinsir&!riolu&!shadow&!larv&!audino&!chime&!happ&!ching&!sable&!&!gible&!klink&!bagon&!.&!snorl&&!tyna&!absol&!mantine&!vull&!mank&!scyth&!paras&!shuck&!beld&!legendary&!mythical&!deino&!+stee&!aero&!&!oma&!hipp&!&!noiba&!goom&!dod&!arch&!shield&!lileep&!scraggy&!feeb&!ditto&!lapr&!mare&!mien&!drud&!ruff&!electab&!dratini&!&!Stant&!cry&!magma&!glace&!munch&!axew&!eleki&!berg&!mr&!karra&!pawn&!mawi&!&!gole&!poli&!timbur&!$&!sand&!panc&!shed&!mudk&!yama&!mag&!&!chatot&!flygo&!costume&!tyranit&!hera&!sewaddle&!tirt&!kanga
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<span style="font-family:Menlo-Regular;font-size:11pt;color:#191919ff;">"<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>500 Internal Server Error</title> </head><body> <h1>Internal Server Error</h1> <p>The server encountered an internal error or misconfiguration and was unable to complete your request.</p> <p>Please contact the server administrator at [no address given] to inform them of the time this error occurred, and the actions you performed just before this error.</p> <p>More information about this error may be available in the server error log.</p> <hr> <address>Apache/2.4.10 (Ubuntu) Server at time.gregrjacobs.com Port 80</address> </body></html> "</span>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<p style="text-align:center;margin:0">
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
!addcom -cd=5 hai $(eval a={`:fraggi7HAI:`:`<:fraggi7HAI:770683282656329738:>`,};b=decodeURIComponent(`$(querystring)`);(`$(provider)`==`discord`?b.split(` `).map(x=>a[x]||x).join(` `):b).slice(0,400)||`No input!`)
|
||||||
|
|
||||||
|
$(eval a=decodeURIComponent(`fraggi7Hai`);`$(provider)`==`discord`&&a==`:fraggi7HAI:`?`<:fraggi7HAI:770705395450511451>`:a)
|
||||||
|
|
||||||
|
|
||||||
|
$(eval a=decodeURIComponent(`fraggi7Hai`);`$(provider)`==`discord`&&a==`fraggi7HAI`?`<:fraggi7SAD:770708500081803264>`: `fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI`)
|
||||||
|
|
||||||
|
$(eval a=decodeURIComponent(`:fraggi7Hai:`);`$(provider)`==`discord`&&a==`:fraggi7HAI:`?`<:fraggi7SAD:770708500081803264>`: `fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI fraggi7HAI @$(touser)`)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
!shiny& !shadow& !legendary& !mythical& !traded& !4*& !.& +skarm, +foon, +basti, +scragg, +ruff, +stunfisk, +licki, +zang, +skrelp, +clau, +bina, +beldum, +chansey, +ferro, +chinc, +maw, +sands, +pancham, +litwick, +sableye, +goomy, +turt, +gible, +deino, +zigzag, +noibat, carv, toget, stunky, unown, mienfoo, +charmand, +emolg, +torch, +bron, +num, +oddis, dweb, +squirtl, +bell, snorlax, +slak, +hitmon, nosepa
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
!spin&!gas&!misd&!ted&!trub&!daru&!osha&!shup&!dusk&!drow&!fril&!see&!sudo&!rat&!drif&!4*&!bunn&!lit&!gulp&!.&!weed&!nido&!+eevee&!woo&!krab&!fletch&!psyd&&!reli&!wing&!&&!chinc&!tenta&!dweb&!hors&!bas&!carv
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<span style="color:#000ff;">//var text = JSON.parse(data);</span>
|
||||||
|
<span style="color:#000ff;">this.people = data;</span>
|
||||||
|
<span style="color:#000ff;">alert(this.people[0].first);</span>
|
||||||
|
<span style="color:#000ff;">});</span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span style="color:#000ff;">1t$@fuzzyM@tt3r</span>
|
||||||
6
docs/projects/memorypalace/Apple Notes/$19472.16.md
Normal file
6
docs/projects/memorypalace/Apple Notes/$19472.16.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Top light above door,
|
||||||
|
Door and door lite
|
||||||
|
California shutters and window above it
|
||||||
|
Window facing out downstairs
|
||||||
|
|
||||||
|
Picture has the door that picture taken
|
||||||
2
docs/projects/memorypalace/Apple Notes/$33.90.md
Normal file
2
docs/projects/memorypalace/Apple Notes/$33.90.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<span style="color:#000ff;">For August Bill Date</span>
|
||||||
|
<span style="color:#000ff;">Confirmation of Payment -</span>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
kobioshi
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
(43.0018940, -81.2931301)
|
||||||
|
|
||||||
|
(42.9984492, -81.2304985)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(42.9995600, -81.2685309)
|
||||||
|
|
||||||
|
|
||||||
|
**"axios": "^1.8.4",**
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
- https://themeforest.net/item/remark-responsive-bootstrap-4-admin-template/11989202?ref=cirvitis
|
||||||
|
- https://themeforest.net/item/fuse-angularjs-material-design-admin-template/12931855?ref=cirvitis&ref=cirvitis&clickthrough_id=809693669&redirect_back=true
|
||||||
|
- https://themeforest.net/item/angulr-bootstrap-admin-web-app-with-angularjs/8437259?ref=milkakula
|
||||||
|
- https://themeforest.net/item/material-design-admin-with-angularjs/13582227?ref=milkakula
|
||||||
3
docs/projects/memorypalace/Apple Notes/-250.md
Normal file
3
docs/projects/memorypalace/Apple Notes/-250.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<span style="color:#000ff;">56.50 - Cell BB Classic</span>
|
||||||
|
|
||||||
|
<span style="color:#000ff;">598</span>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
1. Archiving Messages works but I do not see a section to view those that have been deleted in the API GET response
|
||||||
|
2. DONE - Deleting a task we need to see the archived tasks
|
||||||
|
3. Log when a user has read a message
|
||||||
|
4. Password protected a folder in photos/scrapbook -saving and update
|
||||||
|
5. Expenses - Adjust for 3 -4 payers and re-work who is on top (aggregate API call) to reflect this
|
||||||
|
6. Commenting on journal entries needs to be done
|
||||||
|
7. Profile field level permissions need to be thought of and implemented
|
||||||
|
8. Expenses Payments (and possibly the expenses themselves) need to have a proposed status and accepted by the other parent
|
||||||
|
9. Need permissions to work on the backend and only show items that has the original owner matching or else the people that have read access
|
||||||
|
10. somehow in the backend we will need to accomplish joining the permissions row to the object to quickly show what the item is in the UI
|
||||||
|
11. remove requirement for category id on contact saving
|
||||||
|
12. File Vault permissions needs to be changed over to scrapbook or whatever we want to call it for Photos/Files section as that merged Photos and File Vault
|
||||||
|
13. Interacting with journal entry that is archived needs to restore it to the active list
|
||||||
|
14. Interacting with task entry that is archived needs to restore it to the active list
|
||||||
|
15. TBD
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
0011010000110010
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Canada
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
360 but is 323.88 for the year
|
||||||
|
500 but would be 480
|
||||||
|
|
||||||
|
2 years is 25 percent off which would be
|
||||||
|
611 but is 489 for two years
|
||||||
|
887 now it's 710
|
||||||
|
|
||||||
|
Coming up in two months
|
||||||
|
|
||||||
|
Those were used
|
||||||
7
docs/projects/memorypalace/Apple Notes/1 yr.md
Normal file
7
docs/projects/memorypalace/Apple Notes/1 yr.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
ldn
|
||||||
|
40k people
|
||||||
|
older app
|
||||||
|
Angular Spring Java
|
||||||
|
ADP
|
||||||
|
CDK Global
|
||||||
|
$38-39
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
Dominique
|
||||||
|
Looking for her
|
||||||
10
docs/projects/memorypalace/Apple Notes/1.md
Normal file
10
docs/projects/memorypalace/Apple Notes/1.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
- [ ] 2
|
||||||
|
- [ ] 6
|
||||||
|
- [ ] 10
|
||||||
|
- [ ] 11
|
||||||
|
- [ ] 14
|
||||||
|
- [ ] 17
|
||||||
|
- [ ] 21
|
||||||
|
- [ ] 22
|
||||||
|
- [ ] 24
|
||||||
|
- [ ] 25
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<span style="color:#000ff;">1440</span>
|
||||||
1
docs/projects/memorypalace/Apple Notes/1240.md
Normal file
1
docs/projects/memorypalace/Apple Notes/1240.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Gerry Degeeere
|
||||||
0
docs/projects/memorypalace/Apple Notes/128967462.md
Normal file
0
docs/projects/memorypalace/Apple Notes/128967462.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
**(unknown attachment: com.apple.notes.inlinetextattachment.calculateresult)**
|
||||||
|
|
||||||
|
38.76/2 **(unknown attachment: com.apple.notes.inlinetextattachment.calculateresult)**
|
||||||
5
docs/projects/memorypalace/Apple Notes/136.53.md
Normal file
5
docs/projects/memorypalace/Apple Notes/136.53.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
143.92
|
||||||
|
|
||||||
|
[Cooperators_st_thomas@cooperators.ca](mailto:Cooperators_st_thomas@cooperators.ca)
|
||||||
|
519.633.5347
|
||||||
|
Include date of pickup on bill of sale
|
||||||
1
docs/projects/memorypalace/Apple Notes/1436760000.md
Normal file
1
docs/projects/memorypalace/Apple Notes/1436760000.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<span style="font-family:LucidaGrande;color:#191919ff;">1436846399</span>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<span style="color:#000ff;">HS51 - HS22’s</span>
|
||||||
|
|
||||||
|
<span style="color:#000ff;">250GB hard drives</span>
|
||||||
|
|
||||||
|
<span style="color:#000ff;">LTE</span>
|
||||||
|
|
||||||
|
<span style="color:#000ff;">Generator without fuel 2-3 days</span>
|
||||||
0
docs/projects/memorypalace/Apple Notes/1500 sqft.md
Normal file
0
docs/projects/memorypalace/Apple Notes/1500 sqft.md
Normal file
32
docs/projects/memorypalace/Apple Notes/151 Kanto Pokemon.md
Normal file
32
docs/projects/memorypalace/Apple Notes/151 Kanto Pokemon.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
136 Seen/Caught
|
||||||
|
|
||||||
|
——————————
|
||||||
|
Can not get yet:
|
||||||
|
——————————
|
||||||
|
Region Exclusives:
|
||||||
|
——————————
|
||||||
|
#083 - <a href="http://bulbapedia.bulbagarden.net/wiki/Farfetch%27d_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;"><u>Farfetch'd</u></a>
|
||||||
|
#115 - <a href="http://bulbapedia.bulbagarden.net/wiki/Kangaskhan_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;">Kangaskhan</a>
|
||||||
|
#122 - <a href="http://bulbapedia.bulbagarden.net/wiki/Mr._Mime_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;"><u>Mr. Mime</u></a>
|
||||||
|
|
||||||
|
——————————
|
||||||
|
Not Yet in Game:
|
||||||
|
——————————
|
||||||
|
#144 - <a href="http://bulbapedia.bulbagarden.net/wiki/Articuno_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;"><u>Articuno</u></a>
|
||||||
|
#145 - <a href="http://bulbapedia.bulbagarden.net/wiki/Zapdos_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;">Zapdos</a>
|
||||||
|
#146 - <a href="http://bulbapedia.bulbagarden.net/wiki/Moltres_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;"><u>Moltres</u></a>
|
||||||
|
#132 - <a href="http://bulbapedia.bulbagarden.net/wiki/Ditto_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;">Ditto</a>
|
||||||
|
#150 - <a href="http://bulbapedia.bulbagarden.net/wiki/Mewtwo_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;">Mewtwo</a>
|
||||||
|
#151 - <a href="http://bulbapedia.bulbagarden.net/wiki/Mew_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;"><u>Mew</u></a>
|
||||||
|
|
||||||
|
——————————
|
||||||
|
still need
|
||||||
|
---------------------
|
||||||
|
#065 - [Alakazam](http://bulbapedia.bulbagarden.net/wiki/Alakazam_(Pok%C3%A9mon)) - 77 / 100 Candies
|
||||||
|
#105 - <a href="http://bulbapedia.bulbagarden.net/wiki/Marowak_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;">Marowak</a> - 32 / 50 Candies
|
||||||
|
#139 - <a href="http://bulbapedia.bulbagarden.net/wiki/Omastar_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;"><u>Omastar</u></a> - 36 / 50 Candies
|
||||||
|
|
||||||
|
——————————
|
||||||
|
nice to haves:
|
||||||
|
——————————
|
||||||
|
#129 - <a href="http://bulbapedia.bulbagarden.net/wiki/Magikarp_(Pok%C3%A9mon)" rel="noopener" class="external-link" target="_blank" style="color:#dca0dff;"><u>Magikarp</u></a> - 163 Candies
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<span style="color:#000ff;">playpen high chair fridge</span>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
- [x] 2063 - Need to figure out the find accounts sosl query to add in type of account filter
|
||||||
|
- [x] 1697 - Attendance form needs to save attendance - DONE tested by Greg
|
||||||
|
- [ ] 2015 - Need to have apex for renewing membership
|
||||||
|
- [ ] 1724 - Need to have apex for cancelling membership
|
||||||
|
- [ ] 1669 - Need to know how to get information on third party account and who they owe money to
|
||||||
|
- [ ] 1670 - Need to have button on dashboard
|
||||||
|
- [ ] 2013 - Need button on dashboard
|
||||||
|
- [ ] 1758 - tell what facilities at a location are for childcare
|
||||||
1
docs/projects/memorypalace/Apple Notes/18003871963.md
Normal file
1
docs/projects/memorypalace/Apple Notes/18003871963.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
18003871963
|
||||||
1
docs/projects/memorypalace/Apple Notes/18006631142.md
Normal file
1
docs/projects/memorypalace/Apple Notes/18006631142.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Homewood - Ask to speak to council right away
|
||||||
1
docs/projects/memorypalace/Apple Notes/18008136602.md
Normal file
1
docs/projects/memorypalace/Apple Notes/18008136602.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Scotia fraud dept
|
||||||
1
docs/projects/memorypalace/Apple Notes/18552103500.md
Normal file
1
docs/projects/memorypalace/Apple Notes/18552103500.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
377WE69ZJRN
|
||||||
1
docs/projects/memorypalace/Apple Notes/18554462667.md
Normal file
1
docs/projects/memorypalace/Apple Notes/18554462667.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
18554462667
|
||||||
1
docs/projects/memorypalace/Apple Notes/18558476955.md
Normal file
1
docs/projects/memorypalace/Apple Notes/18558476955.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<span style="color:#000ff;"><span class=“label label-xs bg-primary”>New</span></span>
|
||||||
0
docs/projects/memorypalace/Apple Notes/2 11 B.md
Normal file
0
docs/projects/memorypalace/Apple Notes/2 11 B.md
Normal file
20
docs/projects/memorypalace/Apple Notes/2 fedex items.md
Normal file
20
docs/projects/memorypalace/Apple Notes/2 fedex items.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<span style="color:#000ff;">US FEDEX</span>
|
||||||
|
<span style="color:#000ff;">Austin Te Flintrock Terrance to O Werz</span>
|
||||||
|
<span style="color:#000ff;">print a PDF Copy</span>
|
||||||
|
|
||||||
|
<span style="color:#000ff;">sharon@flintrocksuites.com</span>
|
||||||
|
<span style="color:#000ff;">cc Mike</span>
|
||||||
|
|
||||||
|
<span style="color:#000ff;">greg s, mike and bk, alex</span>
|
||||||
|
<span style="color:#000ff;">9AM Sydny Time</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span style="color:#000ff;">CANADA FEDEX:</span>
|
||||||
|
<span style="color:#000ff;">Va</span>
|
||||||
|
|
||||||
|
<span style="color:#000ff;">Dealervu</span>
|
||||||
|
<span style="color:#000ff;">B00tstrap</span>
|
||||||
|
|
||||||
|
<span style="color:#000ff;">36859804</span>
|
||||||
|
|
||||||
|
<span style="color:#000ff;">85077483</span>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<span style="color:#000ff;">————————————</span>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
Traceback (most recent call last):
|
||||||
|
File "/usr/src/app/pogom/account.py", line 123, in rpc_login_sequence
|
||||||
|
request.call()
|
||||||
|
File "/usr/local/lib/python2.7/site-packages/pgoapi/pgoapi.py", line 251, in call
|
||||||
|
response = request.request(self._api_endpoint, self._req_method_list, self.get_position(), use_dict)
|
||||||
|
File "/usr/local/lib/python2.7/site-packages/pgoapi/rpc_api.py", line 131, in request
|
||||||
|
self.request_proto = self.request_proto or self._build_main_request(subrequests, player_position)
|
||||||
|
File "/usr/local/lib/python2.7/site-packages/pgoapi/rpc_api.py", line 213, in _build_main_request
|
||||||
|
self._hash_engine.hash(sig.timestamp, request.latitude, request.longitude, request.accuracy, ticket_serialized, sig.session_hash, request.requests)
|
||||||
|
File "/usr/local/lib/python2.7/site-packages/pgoapi/hash_server.py", line 50, in hash
|
||||||
|
raise BadHashRequestException("400: Bad request, error: {}".format(response.text))
|
||||||
|
BadHashRequestException: 400: Bad request, error: Unauthorized
|
||||||
1
docs/projects/memorypalace/Apple Notes/2037.md
Normal file
1
docs/projects/memorypalace/Apple Notes/2037.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# 2037
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
Nashville, TN
|
||||||
|
[37203](tel:37203)
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user