Duolingo has streaks built in but it allows you to buy a "Streak freeze" with a virtual currency that you earn by just using the app. When you skip a day, the freeze will be automatically consumed and you have to buy another. You also can't have more than one.
I find this system very effective without being frustrating. Even when you skip a day, you have to at least open the app to buy a new freeze.
I find this system very effective without being frustrating. Even when you skip a day, you have to at least open the app to buy a new freeze.