diff --git a/public/board.js b/public/board.js
index 406c90a..ec793e6 100644
--- a/public/board.js
+++ b/public/board.js
@@ -122,11 +122,13 @@ function choreHub(p) {
const paint = () => {
const mine = data.chores.filter(c => c.user === p.id), todo = mine.filter(c => !c.done), done = mine.filter(c => c.done), pool = data.chores.filter(c => c.claimable && !c.done), me = (data.week && data.week.people.find(x => x.id === p.id)) || { points: 0 };
const row = (c, btns, cls) => `
${esc(c.title)}${c.points ? ` ${c.points} pts` : ''}${btns}
`, h = t => `${t}
`;
- box.innerHTML = head + `${me.points} points this week
`
+ const tier = (data.week ? data.week.tiers : []).find(t => t.id === me.goal), pct = tier ? Math.min(100, Math.round(me.points / tier.points * 100)) : 0, got = tier && me.points >= tier.points;
+ box.innerHTML = head + (tier ? `
๐ฏ ${esc(tier.title)}${me.points} / ${tier.points} pts
${got ? 'You did it! ๐ Tell a parent' : (tier.points - me.points) + ' more points to go'}` : `
${me.points} points this week${(data.week ? data.week.tiers : []).some(t => ((data.week.people.find(x => x.id === p.id) || {}).tiers || []).includes(t.id)) ? ' ยท Choose a reward to aim for' : ''}
`) + `
`
+ h('To do today') + (todo.map(c => row(c, `
${c.claimed ? `
` : ''}`)).join('') || '
Nothing left. Nice! ๐
')
+ (pool.length ? h('Up for grabs. Take one!') + pool.map(c => row(c, `
`)).join('') : '')
+ (done.length ? h('Finished') + done.map(c => row(c, `
`, 'dn')).join('') : '')
+ `
`;
+ const pg = box.querySelector('#pgl'); if (pg) pg.onclick = e => { e.preventDefault(); close(); goalFlow(p.id); };
box.querySelector('#no').onclick = close; box.querySelector('#sgn').onclick = () => { close(); pick(p); };
box.querySelectorAll('[data-a]').forEach(b => b.onclick = () => { b.disabled = true; const c = data.chores.find(x => x.chore === b.dataset.c && (x.user || '') === b.dataset.u); if (c) act(c, b.dataset.a); else { b.disabled = false; load().then(paint); } });
};