parent
907f820778
commit
66bdbd7458
76 changed files with 156 additions and 74 deletions
@ -0,0 +1,81 @@ |
||||
const fs = require('fs'); |
||||
const path = require('path'); |
||||
|
||||
const OPEN_AI_API_KEY = process.env.OPEN_AI_API_KEY; |
||||
const ALL_ROADMAPS_DIR = path.join(__dirname, '../src/data/roadmaps'); |
||||
const ROADMAP_JSON_DIR = path.join(__dirname, '../public/jsons/roadmaps'); |
||||
|
||||
const roadmapId = process.argv[2]; |
||||
|
||||
const allowedRoadmapIds = fs.readdirSync(ALL_ROADMAPS_DIR); |
||||
if (!roadmapId) { |
||||
console.error('roadmapId is required'); |
||||
process.exit(1); |
||||
} |
||||
|
||||
if (!allowedRoadmapIds.includes(roadmapId)) { |
||||
console.error(`Invalid roadmap key ${roadmapId}`); |
||||
console.error(`Allowed keys are ${allowedRoadmapIds.join(', ')}`); |
||||
process.exit(1); |
||||
} |
||||
|
||||
const ROADMAP_CONTENT_DIR = path.join(ALL_ROADMAPS_DIR, roadmapId, 'content'); |
||||
|
||||
function getFilesInFolder(folderPath, fileList = {}) { |
||||
const files = fs.readdirSync(folderPath); |
||||
|
||||
files.forEach((file) => { |
||||
const filePath = path.join(folderPath, file); |
||||
const stats = fs.statSync(filePath); |
||||
|
||||
if (stats.isDirectory()) { |
||||
getFilesInFolder(filePath, fileList); |
||||
} else if (stats.isFile()) { |
||||
const fileUrl = filePath |
||||
.replace(ROADMAP_CONTENT_DIR, '') // Remove the content folder |
||||
.replace(/\/\d+-/g, '/') // Remove ordering info `/101-ecosystem` |
||||
.replace(/\/index\.md$/, '') // Make the `/index.md` to become the parent folder only |
||||
.replace(/\.md$/, ''); // Remove `.md` from the end of file |
||||
|
||||
fileList[fileUrl] = filePath; |
||||
} |
||||
}); |
||||
|
||||
return fileList; |
||||
} |
||||
|
||||
const topicUrlToPathMapping = getFilesInFolder(ROADMAP_CONTENT_DIR); |
||||
|
||||
const roadmapJson = require(path.join(ROADMAP_JSON_DIR, `${roadmapId}.json`)); |
||||
const groups = roadmapJson?.mockup?.controls?.control?.filter( |
||||
(control) => control.typeID === '__group__' && !control.properties?.controlName?.startsWith('ext_link') |
||||
); |
||||
|
||||
groups.forEach((group) => { |
||||
const topicId = group?.properties?.controlName; |
||||
const topicTitle = group?.children?.controls?.control?.find((control) => control?.typeID === 'Label')?.properties |
||||
?.text; |
||||
const currTopicUrl = topicId.replace(/^\d+-/g, '/').replace(/:/g, '/'); |
||||
const contentFilePath = topicUrlToPathMapping[currTopicUrl]; |
||||
|
||||
const currentFileContent = fs.readFileSync(contentFilePath, 'utf8'); |
||||
const isFileEmpty = currentFileContent.replace(/^#.+/, ``).trim() == ''; |
||||
|
||||
if (!isFileEmpty) { |
||||
console.log(`${topicId} not empty. Ignoring...`); |
||||
return; |
||||
} |
||||
|
||||
let newFileContent = `# ${topicTitle}`; |
||||
|
||||
if (!OPEN_AI_API_KEY) { |
||||
console.log(`OPEN_AI_API_KEY not set. Only adding title to ${topicId}..`); |
||||
fs.writeFileSync(contentFilePath, newFileContent, 'utf8'); |
||||
return; |
||||
} |
||||
|
||||
// console.log(currentFileContent); |
||||
// console.log(currTopicUrl); |
||||
// console.log(topicTitle); |
||||
// console.log(topicUrlToPathMapping[currTopicUrl]); |
||||
}); |
@ -1 +1 @@ |
||||
# Help user think about their action |
||||
# Help User think about Their Action |
@ -1 +1 @@ |
||||
# Educate and encourage user |
||||
# Educate and Encourage User |
@ -1 +1 @@ |
||||
# Changing user behavior |
||||
# Support Conscious Action |
@ -1 +1 @@ |
||||
# Make it incidental |
||||
# Make it Incidental |
@ -1 +1 @@ |
||||
# Automate act of repition |
||||
# Automate the Act of Repetition |
@ -1 +1 @@ |
||||
# Help user avoiding the cue |
||||
# Help User Avoiding the Cue |
@ -1 +1 @@ |
||||
# Replace the routine |
||||
# Replace the Routine |
@ -1 +1 @@ |
||||
# Use consciousness to interfere |
||||
# Use Consciousness to Interfere |
@ -1 +1 @@ |
||||
# Mindfulness to avoid acting on the cue |
||||
# Mindfulness to Avoid Acting on the Cue |
@ -1 +1 @@ |
||||
# Crowd out old habit with new behavior |
||||
# Crowd Out Old Habit with New Behavior |
@ -1 +1 @@ |
||||
# Make or change habbits |
||||
# Make or Change Habbits |
@ -1 +1 @@ |
||||
# BJ Fogg's Behavior Model |
||||
# BJ Fogg’s Behavior Grid |
@ -1 +1 @@ |
||||
# Nir eyal hook model |
||||
# Nir Eyal’s Hook Model |
@ -1 +1 @@ |
||||
# Cue routine reward model |
||||
# Cue Routine Reward Model |
@ -1 +1 @@ |
||||
# Target outcome |
||||
# Target Outcome |
@ -1 +1 @@ |
||||
# Target actor |
||||
# Target Actor |
@ -1 +1 @@ |
||||
# Target action |
||||
# Target Action |
@ -1 +1 @@ |
||||
# Create user personas |
||||
# Create User Personas |
@ -1 +1 @@ |
||||
# Business model canvas |
||||
# Business Model Canvas |
@ -1 +1 @@ |
||||
# Lean canvas |
||||
# Lean Canvas |
@ -1 +1 @@ |
||||
# Understand the product |
||||
# Understanding the Product |
@ -1 +1 @@ |
||||
# Business model inspirator |
||||
# Business Model Inspirator |
@ -1 +1 @@ |
||||
# Competitor analysis |
||||
# Competitor Analysis |
@ -1 +1 @@ |
||||
# Five forces model |
||||
# Five Forces Model |
@ -1 +1 @@ |
||||
# Swot analysis |
||||
# SWOT Analysis |
@ -1 +1 @@ |
||||
# User stories |
||||
# User Stories |
@ -1 +1 @@ |
||||
# Custom experience map |
||||
# Customer Experience Map by Mel Edwards |
@ -1 +1 @@ |
||||
# Simple flowchart |
||||
# Simple Flowchart |
@ -1 +1 @@ |
||||
# Event driven process chain model |
||||
# Event-Driven Process Chain Model (EPC) |
@ -1 +1 @@ |
||||
# Business process model and notation |
||||
# Business Process Model and Notation (BPMN) |
@ -1 +1 @@ |
||||
# Conceptual design |
||||
# Conceptual Design |
@ -1 +1 @@ |
||||
# Keep it short simple |
||||
# In general, Keep it Short and Simple |
@ -1 +1 @@ |
||||
# Make it easy |
||||
# Make it Easy to Understand, Easy to Complete |
@ -1 +1 @@ |
||||
# Make progress visible |
||||
# Make Progress Visible to User |
@ -1 +1 @@ |
||||
# Make progress meaningful reward user |
||||
# Make Progress Meaningful in order to Reward User |
@ -1 +1 @@ |
||||
# Make successful completion clearly visible |
||||
# Make Successful Completion Clearly Visible |
@ -1 +1 @@ |
||||
# Good layout rules |
||||
# Good Layout Rules |
@ -1 +1 @@ |
||||
# Prototyping |
||||
# ProtoTyping |
@ -1 +1 @@ |
||||
# Call to action |
||||
# Call to Action |
@ -1 +1 @@ |
||||
# Status reports |
||||
# Status Reports |
@ -1 +1 @@ |
||||
# How to tips |
||||
# How-to-Tips |
@ -1 +1 @@ |
||||
# Reminders planning prompts |
||||
# Simple Reminders and Planning Prompts |
@ -1 +1 @@ |
||||
# Decision making support |
||||
# Decision-Making Support |
@ -1 +1 @@ |
||||
# Behavior change games |
||||
# Behavior Change Games |
@ -1 +1 @@ |
||||
# Social sharing |
||||
# Social Sharing |
@ -1 +1 @@ |
||||
# Goal trackers |
||||
# Goal Trackers |
@ -1 +1 @@ |
||||
# Adobe xd |
||||
# Adobe XD |
@ -1 +1 @@ |
||||
# Avoid temporal myopia |
||||
# Frame Text to Avoid Temporal Myopia |
@ -1 +1 @@ |
||||
# Remind of prior commitment to act |
||||
# Remind of Prior Commitment to Act |
@ -1 +1 @@ |
||||
# Make commitment to friends |
||||
# Make Commitment to Friends |
@ -1 +1 @@ |
||||
# Make reward scarce |
||||
# Make Reward Scarce |
@ -1 +1 @@ |
||||
# Tell user and ask |
||||
# Tell User What the Action is and Ask for it |
@ -1 +1 @@ |
||||
# Make it clear where to act |
||||
# Make it Clear, Where to Act |
@ -1 +1 @@ |
||||
# Clear the page of distractions |
||||
# Clear the Page of Distractions |
@ -1 +1 @@ |
||||
# Prime user relevant associations |
||||
# Prime User-Relevant Associations |
@ -1 +1 @@ |
||||
# Leverage loss aversion |
||||
# Leverage Loss Aversion |
@ -1 +1 @@ |
||||
# Use peer comparisons |
||||
# Use Peer Comparisons |
@ -1 +1 @@ |
||||
# Use competition |
||||
# Use Competition |
@ -1 +1 @@ |
||||
# Avoid cognitive overhead |
||||
# Avoid Cognitive Overhead |
@ -1 +1 @@ |
||||
# Avoid choice overload |
||||
# Avoid Choice Overload |
@ -1 +1 @@ |
||||
# Avoid direct payments |
||||
# Avoid Direct Payments |
@ -1 +1 @@ |
||||
# Ux best practices |
||||
# UX Best Practices |
@ -1 +1 @@ |
||||
# Elicit implementation intentions |
||||
# Elicit Implementation Intentions |
@ -1 +1 @@ |
||||
# Default everything |
||||
# Default Everything |
@ -1 +1 @@ |
||||
# Lessen the burden of action info |
||||
# Lessen the Burden of Action/Info. |
@ -1 +1 @@ |
||||
# Deploy peer comparisons |
||||
# Deploy Peer Comparisons |
@ -1 +1 @@ |
||||
# Make ui professional and beautiful |
||||
# Make UI Professional and Beautiful |
@ -1 +1 @@ |
||||
# Deploy social proof |
||||
# Deploy Social Proof |
@ -1 +1 @@ |
||||
# Deploy strong subject authority |
||||
# Deploy Strong Authority on Subject |
@ -1 +1 @@ |
||||
# Be authentic and personal |
||||
# Be Authentic and Personal |
@ -1 +1 @@ |
||||
# Gather lessons prioritize integrate |
||||
# Gather Lessons Learned, |
@ -1 +1 @@ |
||||
# Measuring the impact |
||||
# Measuring the Impact |
@ -1 +1 @@ |
||||
# Incremental ab testing |
||||
# Incremental A/B Testing |
@ -1 +1 @@ |
||||
# Multivariate testing |
||||
# Multivariate Testing |
Loading…
Reference in new issue