Habit Tracker Mini Program: Features, Architecture, and Custom Calendar Styling
This article introduces a WeChat mini‑program for habit tracking that combines PHP‑MySQL backend services with a UniApp‑based front‑end, detailing its habit‑check‑in, focus‑training features, custom calendar UI styling, and chart integration for statistical visualization.
The author describes the creation of a WeChat mini‑program called "My Daily Routine Check‑in" that helps users record habit check‑ins and practice focused training, aiming to build good habits and reduce procrastination.
Technical stack : the backend API is implemented with PHP and MySQL, while the front‑end is built using UniApp and packaged as a WeChat mini‑program; habit‑related images are stored on Qiniu Cloud.
Interface overview : the home page shows the day's habits, allowing multiple check‑ins per habit; statistics can be viewed by day, week, month, or year; a focus‑training module provides a Pomodoro timer and visual charts.
Custom calendar component : the built‑in uni-calendar component is restyled with the following CSS (kept unchanged):
<style scoped>
.uni-calendar--hook >>> .uni-calendar__content { border-radius: 20rpx; font-weight: 500; }
.uni-calendar--hook >>> .uni-calendar__header { height: 40px; }
.uni-calendar--hook >>> .uni-calendar__weeks-day { height: 35px; font-weight: normal; }
.uni-calendar--hook >>> .uni-calendar-item__weeks-box-item { height: 60rpx; width: 60rpx; }
.uni-calendar--hook >>> .uni-calendar-item--signed .uni-calendar-item__weeks-box-item { border-radius: 60rpx; }
.uni-calendar--hook >>> .uni-calendar-item--un-signed .uni-calendar-item__weeks-box-item { background-color: #f9ae3d; border-radius: 60rpx; }
.uni-calendar--hook >>> .uni-calendar-item--signed .uni-calendar-item--disable,
.uni-calendar--hook >>> .uni-calendar-item--un-signed .uni-calendar-item--disable { background-color: transparent; }
.uni-calendar--hook >>> .uni-calendar-item--signed .uni-calendar-item--extra,
.uni-calendar--hook >>> .uni-calendar-item--un-signed .uni-calendar-item--extra { display: none; }
.uni-calendar--hook >>> .uni-calendar-item--signed .uni-calendar-item__weeks-box-text,
.uni-calendar--hook >>> .uni-calendar-item--un-signed .uni-calendar-item__weeks-box-text { color: #fff; }
.uni-calendar--hook >>> .uni-calendar-item--isDay { background-color: transparent; color: #f9ae3d; opacity: 1; line-height: normal; }
.uni-calendar--hook >>> .uni-calendar-item--isDay-text { color: #333; }
.uni-calendar--hook >>> .uni-calendar-item__weeks-box-circle { background-color: #f9ae3d; display: none; }
.uni-calendar--hook >>> .uni-calendar-item--checked { background-color: transparent; color: #333; opacity: 1; }
</style>Focus‑training chart : instead of a third‑party library, the author uses the official echarts‑for‑weixin component to render a pie chart. The chart template and script are shown below:
<template>
<uni-ec-canvas class="uni-ec-canvas" id="day-canvas" ref="dayCanvas" canvas-id="day-canvas" :ec="ec"></uni-ec-canvas>
</template>
<script>
export default {
data() {
return {
ec: { lazyLoad: true },
optionDay: {
color: [],
series: [{
type: 'pie',
data: [],
label: { formatter: params => { /* format time */ } },
radius: '70%'
}]
}
};
},
methods: {
getDetails() {
this.$nextTick(() => {
setTimeout(() => {
this.$refs.dayCanvas.init(this.initDayChart);
}, 300);
});
}
}
};
</script>Additional features : the personal center allows users to join a group for shared check‑ins, record logs, and even share bonus rewards for early‑morning check‑ins.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Rare Earth Juejin Tech Community
Juejin, a tech community that helps developers grow.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
