How to Gamify Your Life in Notion Most productivity systems die within a week.
Not because they do not work.
Because they are boring.
What if your life felt like a game you actually wanted to play?
Let me show you how to build this inside Notion.
The Concept Before we build, understand this.
Any database where you take action can earn you points or lose points (e.g Bad Habits):
Tasks
Good Habits
Bad Habits
Journal entries
Goals
Projects
Milestones
Reading logs
Notes reviewed
Complete something? Earn XP and Coins.
Slip into a bad habit? Lose XP and Coins.
Buy a reward? Spend Coins.
The entire system runs on this simple economy. Actions have consequences. Good and bad.
Now let us build.
Step 1: Create Your Character Create a database called Character . This is you inside the game.
Add these properties:
Name (Text)
Avatar (Files & Media)
Now create relations to connect your character to everything:
Tasks (Relation)
Good Habits (Relation)
Bad Habits (Relation)
Journal (Relation)
Challenges (Relation)
Titles (Relation)
Rewards (Relation)
Your character does not store points manually.
It pulls them automatically from these connections.
Step 2: Build Your Tasks Database Create a Tasks database with:
Name (Text)
Status (Select: Todo, In Progress, Done)
Date (Date)
XP (Number)
Coins (Number)
Character (Relation)
Assign XP and Coins based on Energy:
Quick task → 10 XP, 20 Coins
High energy Task → 100 XP, 200 Coins
Create a formula to show what the task is worth:
let (
name , prop ( "Character" ) .map ( current .prop ( "Name" ) ) .join ( ", " ) ,
xp , prop ( "XP" ) ,
coins , prop ( "Coins" ) ,
date , prop ( "Date" ) ,
ifs (
prop ( "Status" ) == "Done" , style ( name + ", earned: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "pink" , "b" ) ,
date < today ( ) and prop( "Status" ) != "Done" , style ( name + ", missed: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "red" , "b" ) ,
true , style ( name + ", finish to earn: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "gray" , "b" )
)
)
let (
name , prop ( "Character" ) .map ( current .prop ( "Name" ) ) .join ( ", " ) ,
xp , prop ( "XP" ) ,
coins , prop ( "Coins" ) ,
date , prop ( "Date" ) ,
ifs (
prop ( "Status" ) == "Done" , style ( name + ", earned: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "pink" , "b" ) ,
date < today ( ) and prop( "Status" ) != "Done" , style ( name + ", missed: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "red" , "b" ) ,
true , style ( name + ", finish to earn: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "gray" , "b" )
)
)
let (
name , prop ( "Character" ) .map ( current .prop ( "Name" ) ) .join ( ", " ) ,
xp , prop ( "XP" ) ,
coins , prop ( "Coins" ) ,
date , prop ( "Date" ) ,
ifs (
prop ( "Status" ) == "Done" , style ( name + ", earned: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "pink" , "b" ) ,
date < today ( ) and prop( "Status" ) != "Done" , style ( name + ", missed: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "red" , "b" ) ,
true , style ( name + ", finish to earn: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "gray" , "b" )
)
)
let (
name , prop ( "Character" ) .map ( current .prop ( "Name" ) ) .join ( ", " ) ,
xp , prop ( "XP" ) ,
coins , prop ( "Coins" ) ,
date , prop ( "Date" ) ,
ifs (
prop ( "Status" ) == "Done" , style ( name + ", earned: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "pink" , "b" ) ,
date < today ( ) and prop( "Status" ) != "Done" , style ( name + ", missed: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "red" , "b" ) ,
true , style ( name + ", finish to earn: " + format ( xp ) + " XP + " + format ( coins ) + " Coins" , "gray" , "b" )
)
)
Done? You earned it.
Missed? It haunts you.
Pending? Motivation to move.
Step 3: Build Your Habits Create two databases.
Good Habits
Name (Text)
Date (Date)
Done (Checkbox)
XP (Number)
Coins (Number)
Character (Relation)
Complete a good habit, earn points.
Bad Habits
Name (Text)
Date (Date)
Checked (Checkbox)
XP (Number)
Coins (Number)
Character (Relation)
Slip into a bad habit? You lose points. The system punishes you.
Step 4: Build Your Journal Create a Journal database:
Name (Text)
Date (Date)
Logged (Checkbox)
XP (Number)
Coins (Number)
Character (Relation)
Log your day, earn points. Consistent journaling becomes rewarding.
Step 5: Expand to Everything The same logic works for any database:
Goals → Complete a goal? 500 XP, 1000 Coins
Projects → Finish a project? 200 XP, 400 Coins
Milestones → Hit a milestone? 150 XP, 300 Coins
Books → Finish reading? 100 XP, 200 Coins
Notes Reviewed → Review a note? 10 XP, 20 Coins
Connect each database to your Character .
Add XP and Coins properties. Create the same filter formulas.
Your entire life becomes the game.
Step 6: Points Settings (Optional) As the system grows, manually balancing XP and Coins across every task, habit, and goal becomes messy and slow.
This step lets you control your entire point economy from one place.
Create a database called Points Settings with:
XP (Number)
Coins (Number)
Create one page per action type, for example:
Tasks Settings
Habits Settings
Journal Settings
Goals Settings
Projects Settings
Now, in each action database:
Add a relation to Points Settings
Link it by default to the correct settings page
Change the XP Number Property to a Rollup that pulls XP from that page
Do the same for the Coins Number Property
Change the numbers once in Points Settings , and every related item updates automatically.
Step 7: Calculate Total Points Back to your Character database.
All Time XP
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( ) -
prop ( "Bad Habits" ) .filter ( current .prop ( "Checked" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( )
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( ) -
prop ( "Bad Habits" ) .filter ( current .prop ( "Checked" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( )
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( ) -
prop ( "Bad Habits" ) .filter ( current .prop ( "Checked" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( )
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( ) -
prop ( "Bad Habits" ) .filter ( current .prop ( "Checked" ) == true ) .map ( current .prop ( "XP" ) ) .sum ( )
All Time Coins
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .map ( current .prop ( "Coins" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( ) +
prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( ) -
prop ( "Bad Habits" ) .filter ( current .prop ( "Checked" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( )
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .map ( current .prop ( "Coins" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( ) +
prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( ) -
prop ( "Bad Habits" ) .filter ( current .prop ( "Checked" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( )
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .map ( current .prop ( "Coins" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( ) +
prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( ) -
prop ( "Bad Habits" ) .filter ( current .prop ( "Checked" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( )
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .map ( current .prop ( "Coins" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( ) +
prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( ) -
prop ( "Bad Habits" ) .filter ( current .prop ( "Checked" ) == true ) .map ( current .prop ( "Coins" ) ) .sum ( )
Add more lines for Goals, Projects, Milestones, whatever you built.
Notice the minus for Bad Habits. They subtract from your total.
And you can mix both formulas into just one (like the image)
Step 8: Level System Create a Level formula:
floor ( prop ( "All Time XP" ) / 1000 )
floor ( prop ( "All Time XP" ) / 1000 )
floor ( prop ( "All Time XP" ) / 1000 )
floor ( prop ( "All Time XP" ) / 1000 )
Every 1000 XP, you level up.
Then let's make it look Aesthetic with this Formula :
let (
xp , prop ( "All Time XP" ) ,
level , floor ( xp / 100 ) ,
current , xp - ( level * 100 ) ,
bar , "▰" .repeat ( floor ( current / 10 ) ) + "▱" .repeat ( 10 - floor ( current / 10 ) ) ,
"Level " + format ( level ) + " " + bar + " " + format ( current ) + "/100 XP"
)
let (
xp , prop ( "All Time XP" ) ,
level , floor ( xp / 100 ) ,
current , xp - ( level * 100 ) ,
bar , "▰" .repeat ( floor ( current / 10 ) ) + "▱" .repeat ( 10 - floor ( current / 10 ) ) ,
"Level " + format ( level ) + " " + bar + " " + format ( current ) + "/100 XP"
)
let (
xp , prop ( "All Time XP" ) ,
level , floor ( xp / 100 ) ,
current , xp - ( level * 100 ) ,
bar , "▰" .repeat ( floor ( current / 10 ) ) + "▱" .repeat ( 10 - floor ( current / 10 ) ) ,
"Level " + format ( level ) + " " + bar + " " + format ( current ) + "/100 XP"
)
let (
xp , prop ( "All Time XP" ) ,
level , floor ( xp / 100 ) ,
current , xp - ( level * 100 ) ,
bar , "▰" .repeat ( floor ( current / 10 ) ) + "▱" .repeat ( 10 - floor ( current / 10 ) ) ,
"Level " + format ( level ) + " " + bar + " " + format ( current ) + "/100 XP"
)
Now you see exactly where you stand.
Step 9: Track What You Missed Most systems celebrate wins.This one tracks failures too.
Missed XP (Same for Coins)
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) != "Done" and current .prop ( "Date" ) < today ( ) ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) != true and current .prop ( "Date" ) < today ( ) ) .map ( current .prop ( "XP" ) ) .sum ( )
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) != "Done" and current .prop ( "Date" ) < today ( ) ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) != true and current .prop ( "Date" ) < today ( ) ) .map ( current .prop ( "XP" ) ) .sum ( )
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) != "Done" and current .prop ( "Date" ) < today ( ) ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) != true and current .prop ( "Date" ) < today ( ) ) .map ( current .prop ( "XP" ) ) .sum ( )
prop ( "Tasks" ) .filter ( current .prop ( "Status" ) != "Done" and current .prop ( "Date" ) < today ( ) ) .map ( current .prop ( "XP" ) ) .sum ( ) +
prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) != true and current .prop ( "Date" ) < today ( ) ) .map ( current .prop ( "XP" ) ) .sum ( )
Past tasks undone. Habits skipped. XP lost forever.
This number grows when you slack. It should hurt.
Step 10: Discipline Tracker Create a formula that shows your true consistency:
let (
totalTasks , prop ( "Tasks" ) .length ( ) ,
doneTasks , prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .length ( ) ,
totalHabits , prop ( "Good Habits" ) .length ( ) ,
doneHabits , prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .length ( ) ,
total , totalTasks + totalHabits ,
done , doneTasks + doneHabits ,
percent , if ( total == 0 , 0 , floor ( done / total * 100 ) ) ,
ifs (
percent >= 90 , style ( "Discipline: " + format ( percent ) + "% 🔥" , "pink" , "b" ) ,
percent >= 70 , style ( "Discipline: " + format ( percent ) + "% 💪" , "blue" , "b" ) ,
percent >= 50 , style ( "Discipline: " + format ( percent ) + "% ⚡" , "yellow" , "b" ) ,
true , style ( "Discipline: " + format ( percent ) + "% 😤" , "red" , "b" )
)
)
let (
totalTasks , prop ( "Tasks" ) .length ( ) ,
doneTasks , prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .length ( ) ,
totalHabits , prop ( "Good Habits" ) .length ( ) ,
doneHabits , prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .length ( ) ,
total , totalTasks + totalHabits ,
done , doneTasks + doneHabits ,
percent , if ( total == 0 , 0 , floor ( done / total * 100 ) ) ,
ifs (
percent >= 90 , style ( "Discipline: " + format ( percent ) + "% 🔥" , "pink" , "b" ) ,
percent >= 70 , style ( "Discipline: " + format ( percent ) + "% 💪" , "blue" , "b" ) ,
percent >= 50 , style ( "Discipline: " + format ( percent ) + "% ⚡" , "yellow" , "b" ) ,
true , style ( "Discipline: " + format ( percent ) + "% 😤" , "red" , "b" )
)
)
let (
totalTasks , prop ( "Tasks" ) .length ( ) ,
doneTasks , prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .length ( ) ,
totalHabits , prop ( "Good Habits" ) .length ( ) ,
doneHabits , prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .length ( ) ,
total , totalTasks + totalHabits ,
done , doneTasks + doneHabits ,
percent , if ( total == 0 , 0 , floor ( done / total * 100 ) ) ,
ifs (
percent >= 90 , style ( "Discipline: " + format ( percent ) + "% 🔥" , "pink" , "b" ) ,
percent >= 70 , style ( "Discipline: " + format ( percent ) + "% 💪" , "blue" , "b" ) ,
percent >= 50 , style ( "Discipline: " + format ( percent ) + "% ⚡" , "yellow" , "b" ) ,
true , style ( "Discipline: " + format ( percent ) + "% 😤" , "red" , "b" )
)
)
let (
totalTasks , prop ( "Tasks" ) .length ( ) ,
doneTasks , prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .length ( ) ,
totalHabits , prop ( "Good Habits" ) .length ( ) ,
doneHabits , prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .length ( ) ,
total , totalTasks + totalHabits ,
done , doneTasks + doneHabits ,
percent , if ( total == 0 , 0 , floor ( done / total * 100 ) ) ,
ifs (
percent >= 90 , style ( "Discipline: " + format ( percent ) + "% 🔥" , "pink" , "b" ) ,
percent >= 70 , style ( "Discipline: " + format ( percent ) + "% 💪" , "blue" , "b" ) ,
percent >= 50 , style ( "Discipline: " + format ( percent ) + "% ⚡" , "yellow" , "b" ) ,
true , style ( "Discipline: " + format ( percent ) + "% 😤" , "red" , "b" )
)
)
Above 90%? You are on fire. Below 50%? The game is disappointed.
Step 11: Create Challenges Create a Challenges database:
Name (Text)
Target (Number)
Challenge Type (Select: Tasks, Habits, Journal, Projects)
Character (Relation)
Challenge Started (Checkbox)
Puzzles (Number)
Level Reward (Number)
Progress formula:
let (
char , prop ( "Character" ) .first ( ) ,
type , prop ( "Challenge Type" ) ,
target , prop ( "Target" ) ,
done , ifs (
type == "Tasks" , char .prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .length ( ) ,
type == "Habits" , char .prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .length ( ) ,
type == "Journal" , char .prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .length ( ) ,
true , 0
) ,
min ( done / target , 1 )
)
let (
char , prop ( "Character" ) .first ( ) ,
type , prop ( "Challenge Type" ) ,
target , prop ( "Target" ) ,
done , ifs (
type == "Tasks" , char .prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .length ( ) ,
type == "Habits" , char .prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .length ( ) ,
type == "Journal" , char .prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .length ( ) ,
true , 0
) ,
min ( done / target , 1 )
)
let (
char , prop ( "Character" ) .first ( ) ,
type , prop ( "Challenge Type" ) ,
target , prop ( "Target" ) ,
done , ifs (
type == "Tasks" , char .prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .length ( ) ,
type == "Habits" , char .prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .length ( ) ,
type == "Journal" , char .prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .length ( ) ,
true , 0
) ,
min ( done / target , 1 )
)
let (
char , prop ( "Character" ) .first ( ) ,
type , prop ( "Challenge Type" ) ,
target , prop ( "Target" ) ,
done , ifs (
type == "Tasks" , char .prop ( "Tasks" ) .filter ( current .prop ( "Status" ) == "Done" ) .length ( ) ,
type == "Habits" , char .prop ( "Good Habits" ) .filter ( current .prop ( "Done" ) == true ) .length ( ) ,
type == "Journal" , char .prop ( "Journal" ) .filter ( current .prop ( "Logged" ) == true ) .length ( ) ,
true , 0
) ,
min ( done / target , 1 )
)
Challenge Done formula:
prop ( "Progress" ) >= 1 and prop ( "Challenge Started" ) == true
prop ( "Progress" ) >= 1 and prop ( "Challenge Started" ) == true
prop ( "Progress" ) >= 1 and prop ( "Challenge Started" ) == true
prop ( "Progress" ) >= 1 and prop ( "Challenge Started" ) == true
Aesthetic Progress formula:
let (
name , prop ( "Character" ) .map ( current .prop ( "Name" ) ) .join ( ", " ) ,
prog , min ( prop ( "Progress" ) , 1 ) ,
percent , floor ( prog * 100 ) ,
bar , "—" .repeat ( floor ( prog * 10 ) ) + "⌾" + "—" .repeat ( 10 - floor ( prog * 10 ) - 1 ) ,
ifs (
not prop( "Challenge Started" ) , style ( name + ", start the challenge 🏁" , "white" , "b" ) ,
prog >= 1 , style ( name + ", challenge completed 🔥" , "pink" , "b" ) ,
true , style ( "Progress: " + bar + " " + format ( percent ) + "%" , "purple" , "b" )
)
)
let (
name , prop ( "Character" ) .map ( current .prop ( "Name" ) ) .join ( ", " ) ,
prog , min ( prop ( "Progress" ) , 1 ) ,
percent , floor ( prog * 100 ) ,
bar , "—" .repeat ( floor ( prog * 10 ) ) + "⌾" + "—" .repeat ( 10 - floor ( prog * 10 ) - 1 ) ,
ifs (
not prop( "Challenge Started" ) , style ( name + ", start the challenge 🏁" , "white" , "b" ) ,
prog >= 1 , style ( name + ", challenge completed 🔥" , "pink" , "b" ) ,
true , style ( "Progress: " + bar + " " + format ( percent ) + "%" , "purple" , "b" )
)
)
let (
name , prop ( "Character" ) .map ( current .prop ( "Name" ) ) .join ( ", " ) ,
prog , min ( prop ( "Progress" ) , 1 ) ,
percent , floor ( prog * 100 ) ,
bar , "—" .repeat ( floor ( prog * 10 ) ) + "⌾" + "—" .repeat ( 10 - floor ( prog * 10 ) - 1 ) ,
ifs (
not prop( "Challenge Started" ) , style ( name + ", start the challenge 🏁" , "white" , "b" ) ,
prog >= 1 , style ( name + ", challenge completed 🔥" , "pink" , "b" ) ,
true , style ( "Progress: " + bar + " " + format ( percent ) + "%" , "purple" , "b" )
)
)
let (
name , prop ( "Character" ) .map ( current .prop ( "Name" ) ) .join ( ", " ) ,
prog , min ( prop ( "Progress" ) , 1 ) ,
percent , floor ( prog * 100 ) ,
bar , "—" .repeat ( floor ( prog * 10 ) ) + "⌾" + "—" .repeat ( 10 - floor ( prog * 10 ) - 1 ) ,
ifs (
not prop( "Challenge Started" ) , style ( name + ", start the challenge 🏁" , "white" , "b" ) ,
prog >= 1 , style ( name + ", challenge completed 🔥" , "pink" , "b" ) ,
true , style ( "Progress: " + bar + " " + format ( percent ) + "%" , "purple" , "b" )
)
)
Complete challenges. Earn puzzles and extra Levels.
Step 12: Create Titles Create a Titles database:
Title
Puzzles Required
Booster
Newcomer
0
1x
Rising Star
5
1.15x
Goal Crusher
15
1.3x
Elite Performer
30
1.5x
Grand Master
50
1.75x
Champion
75
2x
Unstoppable
100
2.5x
In Character, create Total Puzzles :
prop ( "Challenges" ) .filter ( current .prop ( "Challenge Done" ) == true ) .map ( current .prop ( "Puzzles" ) ) .sum ( )
prop ( "Challenges" ) .filter ( current .prop ( "Challenge Done" ) == true ) .map ( current .prop ( "Puzzles" ) ) .sum ( )
prop ( "Challenges" ) .filter ( current .prop ( "Challenge Done" ) == true ) .map ( current .prop ( "Puzzles" ) ) .sum ( )
prop ( "Challenges" ) .filter ( current .prop ( "Challenge Done" ) == true ) .map ( current .prop ( "Puzzles" ) ) .sum ( )
Create Current Title :
let (
puzzles , prop ( "Total Puzzles" ) ,
earned , prop ( "Titles" ) .filter ( puzzles >= current .prop ( "Puzzles Required" ) ) ,
best , earned .sort ( current .prop ( "Puzzles Required" ) ) .last ( ) ,
if ( empty ( earned ) , "No title yet" , "🎖️ " + best .prop ( "Name" ) )
)
let (
puzzles , prop ( "Total Puzzles" ) ,
earned , prop ( "Titles" ) .filter ( puzzles >= current .prop ( "Puzzles Required" ) ) ,
best , earned .sort ( current .prop ( "Puzzles Required" ) ) .last ( ) ,
if ( empty ( earned ) , "No title yet" , "🎖️ " + best .prop ( "Name" ) )
)
let (
puzzles , prop ( "Total Puzzles" ) ,
earned , prop ( "Titles" ) .filter ( puzzles >= current .prop ( "Puzzles Required" ) ) ,
best , earned .sort ( current .prop ( "Puzzles Required" ) ) .last ( ) ,
if ( empty ( earned ) , "No title yet" , "🎖️ " + best .prop ( "Name" ) )
)
let (
puzzles , prop ( "Total Puzzles" ) ,
earned , prop ( "Titles" ) .filter ( puzzles >= current .prop ( "Puzzles Required" ) ) ,
best , earned .sort ( current .prop ( "Puzzles Required" ) ) .last ( ) ,
if ( empty ( earned ) , "No title yet" , "🎖️ " + best .prop ( "Name" ) )
)
Create Points Booster :
let (
puzzles , prop ( "Total Puzzles" ) ,
earned , prop ( "Titles" ) .filter ( puzzles >= current .prop ( "Puzzles Required" ) ) ,
if ( empty ( earned ) , 1 , earned .map ( current .prop ( "Booster" ) ) .max ( ) )
)
let (
puzzles , prop ( "Total Puzzles" ) ,
earned , prop ( "Titles" ) .filter ( puzzles >= current .prop ( "Puzzles Required" ) ) ,
if ( empty ( earned ) , 1 , earned .map ( current .prop ( "Booster" ) ) .max ( ) )
)
let (
puzzles , prop ( "Total Puzzles" ) ,
earned , prop ( "Titles" ) .filter ( puzzles >= current .prop ( "Puzzles Required" ) ) ,
if ( empty ( earned ) , 1 , earned .map ( current .prop ( "Booster" ) ) .max ( ) )
)
let (
puzzles , prop ( "Total Puzzles" ) ,
earned , prop ( "Titles" ) .filter ( puzzles >= current .prop ( "Puzzles Required" ) ) ,
if ( empty ( earned ) , 1 , earned .map ( current .prop ( "Booster" ) ) .max ( ) )
)
Your title multiplies your XP. Higher title, faster growth.
Step 13: Create Rewards Create a Rewards database:
Reward Name (Text)
Cost (Number)
Required Level (Number)
Character (Relation)
Purchased (Checkbox)
Can Claim formula:
let (
char , prop ( "Character" ) .first ( ) ,
coins , char .prop ( "All Time Coins" ) ,
level , char .prop ( "Level" ) ,
ifs (
prop ( "Purchased" ) , style ( "Purchased ✓" , "green" , "b" ) ,
coins >= prop ( "Cost" ) and level >= prop ( "Required Level" ) , style ( "Unlocked 🔓" , "pink" , "b" ) ,
level < prop ( "Required Level" ) , style ( "Reach Level " + format ( prop ( "Required Level" ) ) , "gray" , "b" ) ,
true , style ( "Need " + format ( prop ( "Cost" ) - coins ) + " more Coins" , "gray" , "b" )
)
)
let (
char , prop ( "Character" ) .first ( ) ,
coins , char .prop ( "All Time Coins" ) ,
level , char .prop ( "Level" ) ,
ifs (
prop ( "Purchased" ) , style ( "Purchased ✓" , "green" , "b" ) ,
coins >= prop ( "Cost" ) and level >= prop ( "Required Level" ) , style ( "Unlocked 🔓" , "pink" , "b" ) ,
level < prop ( "Required Level" ) , style ( "Reach Level " + format ( prop ( "Required Level" ) ) , "gray" , "b" ) ,
true , style ( "Need " + format ( prop ( "Cost" ) - coins ) + " more Coins" , "gray" , "b" )
)
)
let (
char , prop ( "Character" ) .first ( ) ,
coins , char .prop ( "All Time Coins" ) ,
level , char .prop ( "Level" ) ,
ifs (
prop ( "Purchased" ) , style ( "Purchased ✓" , "green" , "b" ) ,
coins >= prop ( "Cost" ) and level >= prop ( "Required Level" ) , style ( "Unlocked 🔓" , "pink" , "b" ) ,
level < prop ( "Required Level" ) , style ( "Reach Level " + format ( prop ( "Required Level" ) ) , "gray" , "b" ) ,
true , style ( "Need " + format ( prop ( "Cost" ) - coins ) + " more Coins" , "gray" , "b" )
)
)
let (
char , prop ( "Character" ) .first ( ) ,
coins , char .prop ( "All Time Coins" ) ,
level , char .prop ( "Level" ) ,
ifs (
prop ( "Purchased" ) , style ( "Purchased ✓" , "green" , "b" ) ,
coins >= prop ( "Cost" ) and level >= prop ( "Required Level" ) , style ( "Unlocked 🔓" , "pink" , "b" ) ,
level < prop ( "Required Level" ) , style ( "Reach Level " + format ( prop ( "Required Level" ) ) , "gray" , "b" ) ,
true , style ( "Need " + format ( prop ( "Cost" ) - coins ) + " more Coins" , "gray" , "b" )
)
)
You need coins and a level. Buy a reward? Those coins are spent. Add that to your All Time Coins formula as a subtraction.
The Hard Truth This system works. I use it every day.
But building it from scratch? Hours of work. Formulas that break. Relations that tangle.
Most people quit halfway.
Notion Game Mode V3 Is Coming The next version of My Personal Gamified Second Brain takes it further.
Character with new skills to level up. Each has its own progression path. Each requires special tokens earned from challenges. You can exchange a new token and trade it for XP or Coins.
New ranks require reaching a skills level to unlock them, which therefore boosts character progress.
A new Rare token (Total 5 new tokens now). You earn it only by logging in daily. Miss a day, gone forever, just like real games.
You can skip an entire hard challenge if you've enough of the new token.
And more features, I can't say much right now, but we built it to help you become more motivated to get things done.
Get Second Brain 6.0 (Game Mode Version) and receive the next Game Mode v3 update for Free when it launches
Note: Game Mode Lunch will be in Feb 2026
Start Free Cannot afford it right now?I built two free templates.
Life Game Mode: Full gamification. Character. Challenges. Rewards. Level system.
Student Game Mode: Built for students. Gamify your assignments and studying.
Your Move You read this far for a reason.
The people who play this game do not wait for motivation.
They build systems that pull them forward.
Will you play?