{% extends "base.html" %} {% block title %}Dashboard โ€” Python 108{% endblock %} {% block content %}

Hello, {{ user['username'] }} ๐Ÿ‘‹

{% if student_class %}Class: {{ student_class['name'] }}  ยท  {% endif %} One program a day changes everything.

{% if next_prog %} Continue โ†’ #{{ next_prog['n'] }} {{ next_prog['title'] }} {% else %}
๐Ÿ† All 108 complete!
๐ŸŽ“ Download Certificate
{% endif %}
{% if announcements %}
{% for a in announcements %}
{% if a['pinned'] %}๐Ÿ“Œ{% else %}๐Ÿ“ข{% endif %}
{{ a['title'] }}
{% if a['body'] %}
{{ a['body'] }}
{% endif %}
{{ a['teacher_name'] }} {{ a['created_at'][:10] }}
{% endfor %}
{% endif %} {% if not student_class %}
๐Ÿซ
You haven't joined a class yet. Have a code from your teacher? Join now to unlock the leaderboard and track your progress with your class.
Enter class code โ†’
{% endif %} {% if assignments %}
๐Ÿ“‹ Assignments {{ assignments|length }} assigned
{% endif %}
{{ level_info.icon }}
Level {{ level_info.level }} โ€” {{ level_info.name }}
{{ total_xp }} XP total
{% if level_info.next_level %}
{{ level_info.xp_in_level }} / {{ level_info.xp_needed }} XP to {{ level_info.next_level.icon }} {{ level_info.next_level.name }}
{% else %}
๐Ÿ† Maximum level reached!
{% endif %}
View badges โ†’
๐Ÿ”ฅ
{{ streak.current_streak }} day streak
{% if streak.studied_today %} โœ“ You studied today โ€” keep it going! {% elif streak.current_streak > 0 %} โšก Complete a program today to keep your {{ streak.current_streak }}-day streak! {% else %} Start your streak โ€” complete a program today! {% endif %}
{{ streak.longest_streak }}
Best streak ๐Ÿ†
{{ streak.total_days }}
Active days
{{ stats.programs_done }}
Programs done
Last 30 days
None 1โ€“2 3โ€“5 5+
{% for day in activity %}
{{ day.day }}
{% endfor %}
{% set seen = [] %} {% for day in activity %} {% if day.month not in seen %} {{ day.month }} {% set _ = seen.append(day.month) %} {% endif %} {% endfor %}
{{ stats.programs_done }}
Programs done
{{ 108 - stats.programs_done }}
Remaining
{{ stats.exercises_done }}
Exercises solved
{{ pct }}%
Progress
{{ quizzes_passed }}/12
Quizzes passed
{% if assignments %} {% set pending = assignments | selectattr('completed', 'equalto', None) | list | length %} {% set overdue = assignments | selectattr('overdue', 'equalto', 1) | list | length %}
{{ assignments|length }}
๐Ÿ“‹ Assigned{% if overdue %} ({{ overdue }} overdue){% endif %}
{% endif %}
0275481108
{% for mod_name, programs in modules.items() %}

{{ mod_name }}

{{ programs|selectattr('done','equalto',true)|list|length }}/{{ programs|length }} {% set slug = module_slugs.get(mod_name) %} {% set qr = quiz_results.get(mod_name) %} {% if slug %} {% if qr %} {% if qr.passed %}๐Ÿ† {{ qr.score }}/10 Passed{% else %}๐Ÿ“ {{ qr.score }}/10 Retry{% endif %} {% else %} ๐Ÿ“ Take Quiz {% endif %} {% endif %}
{% endfor %}
๐ŸŽฏ Streak Milestones
{% for days, label, emoji in [ (3,'3-day start','๐ŸŒฑ'), (7,'1 week','โญ'), (14,'2 weeks','๐Ÿ”ฅ'), (21,'21-day habit','๐Ÿ’ช'), (30,'1 month','๐Ÿ…'), (60,'2 months','๐Ÿฅ‡'), (108,'All 108 days','๐Ÿ†') ] %}
{{ emoji }} {{ label }} {{ days }}d {% if streak.longest_streak >= days %} โœ“ {% endif %}
{% endfor %}
{% if leaderboard %}
๐Ÿ… Class {{ 'XP ' if show_xp else '' }}Leaderboard
{{ student_class['name'] }}
{% for s in leaderboard %} {% set i = loop.index %}
{% if i==1 %}๐Ÿฅ‡{% elif i==2 %}๐Ÿฅˆ{% elif i==3 %}๐Ÿฅ‰{% else %}{{ i }}{% endif %} {{ s['username'] }}{% if s['id']==user['id'] %} (you){% endif %} {% if show_xp %} {{ s['total_xp'] }} XP {% else %} {{ s['prog_done'] }}/108 {% endif %}
{% endfor %}
{% endif %}
{% endblock %}