reprogl
/
.todo2
1033 строки · 30.0 Кб
1{
2"title": "Reprogl tasks",
3"tasks": [
4{
5"text": "Remove fonts awesome #24",
6"priority": "high",
7"creation": 1686423384,
8"completion": 1687124096,
9"tasks": [
10{
11"text": "Glyphicons instead of FontsAwesome",
12"priority": "medium",
13"creation": 1686433321
14}
15]
16},
17{
18"text": "Avatar generator #31",
19"priority": "high",
20"creation": 1686423877,
21"completion": 1687988349,
22"tasks": [
23{
24"text": "Use gravatar if picture exist",
25"priority": "medium",
26"creation": 1686423927,
27"completion": 1687961663
28},
29{
30"text": "Avatar compression",
31"priority": "medium",
32"creation": 1687968893
33}
34]
35},
36{
37"text": "Images gallery in article #30",
38"priority": "medium",
39"creation": 1686424057,
40"completion": 1690540780
41},
42{
43"text": "Comments count in article list #29",
44"priority": "medium",
45"creation": 1686424087,
46"completion": 1686472608
47},
48{
49"text": "GTmetrix optimization #27",
50"priority": "high",
51"creation": 1686424120,
52"completion": 1690487577,
53"tasks": [
54{
55"text": "Использовать GPRS-троттлинг при загрузке",
56"priority": "medium",
57"creation": 1687596660
58},
59{
60"text": "Критические стили сразу в html",
61"priority": "medium",
62"creation": 1687596690,
63"tasks": [
64{
65"text": "https://web.dev/critical-rendering-path-adding-interactivity-with-javascript/",
66"priority": "medium",
67"creation": 1690117973
68},
69{
70"text": "https://web.dev/defer-non-critical-css/",
71"priority": "medium",
72"creation": 1690117987
73},
74{
75"text": "https://web.dev/extract-critical-css/",
76"priority": "medium",
77"creation": 1690118002
78}
79]
80},
81{
82"text": "Сокращение цепочек отложенной загрузки (шрифты, фоны)",
83"priority": "medium",
84"creation": 1687596740,
85"completion": 1690462007
86},
87{
88"text": "remove Shuffle.js",
89"priority": "medium",
90"creation": 1688143411,
91"completion": 1688145692
92},
93{
94"text": "оптимизация стилей",
95"priority": "medium",
96"creation": 1689582219,
97"tasks": [
98{
99"text": "сборка foundation.css без ненужных стилей",
100"priority": "medium",
101"creation": 1689582284,
102"completion": 1690462033
103},
104{
105"text": "упорядочить и проредить размеры @media в CSS",
106"priority": "medium",
107"creation": 1689582357
108}
109]
110}
111]
112},
113{
114"text": "External library for cache #25",
115"priority": "high",
116"creation": 1686424143,
117"completion": 1687780776,
118"tasks": [
119{
120"text": "Сохранять Geolocation ID в трекинге",
121"priority": "medium",
122"creation": 1687082513,
123"completion": 1687774403
124},
125{
126"text": "Сохранять минимальный Recent Posts ID для сайдбара",
127"priority": "medium",
128"creation": 1687670277,
129"completion": 1687728195
130},
131{
132"text": "Clear cache by button",
133"priority": "medium",
134"creation": 1687774470
135}
136]
137},
138{
139"text": "Use SVG images #24",
140"priority": "verylow",
141"creation": 1686424190,
142"completion": 1691321251,
143"tasks": [
144{
145"text": "use SVG symbols from sprites.svg",
146"priority": "medium",
147"creation": 1686424214,
148"completion": 1687124118
149},
150{
151"text": "replace logo to SVG",
152"priority": "medium",
153"creation": 1686424232,
154"tasks": [
155{
156"text": "https://svg-art.ru/?p=5",
157"priority": "low",
158"creation": 1691096694
159},
160{
161"text": "https://jenkov.com/tutorials/svg/svg-viewport-view-box.html",
162"priority": "low",
163"creation": 1691096752
164},
165{
166"text": "https://www.w3.org/TR/SVG/coords.html",
167"priority": "low",
168"creation": 1691140469
169}
170]
171},
172{
173"text": "remove fontsawesome",
174"priority": "medium",
175"creation": 1686424267,
176"completion": 1687124126
177}
178]
179},
180{
181"text": "ZIP bomb #22",
182"priority": "low",
183"creation": 1686424298
184},
185{
186"text": "Log to file (access, errors) #18",
187"priority": "low",
188"creation": 1686424324,
189"tasks": [
190{
191"text": "maybe use logrotate on production",
192"priority": "medium",
193"creation": 1686424345
194},
195{
196"text": "maybe use other logs system, with GUI, search etc.",
197"priority": "medium",
198"creation": 1688471622
199}
200]
201},
202{
203"text": "Tracking #17",
204"priority": "low",
205"creation": 1686424373,
206"completion": 1721496271,
207"tasks": [
208{
209"text": "first step - implement tracking like the tracking system in the old blog",
210"priority": "medium",
211"creation": 1686424389,
212"completion": 1686424783
213},
214{
215"text": "after this - add geolocation",
216"priority": "medium",
217"creation": 1686424403,
218"completion": 1686954107
219},
220{
221"text": "page view counter by cron-task",
222"priority": "medium",
223"creation": 1686424416,
224"completion": 1686744221
225},
226{
227"text": "admin dashboard list for tracking",
228"priority": "medium",
229"creation": 1686424430,
230"completion": 1686601822
231},
232{
233"text": "bot detection",
234"priority": "medium",
235"creation": 1686466747,
236"completion": 1686666040
237},
238{
239"text": "Save method, caching only GET",
240"priority": "medium",
241"creation": 1686954076
242}
243]
244},
245{
246"text": "IE and SVG use external source #16",
247"priority": "verylow",
248"creation": 1686424529,
249"completion": 1690980407,
250"tasks": [
251{
252"text": "https://css-tricks.com/svg-use-external-source/",
253"priority": "medium",
254"creation": 1686424547
255},
256{
257"text": "https://css-tricks.com/svg-use-with-external-reference-take-2/",
258"priority": "medium",
259"creation": 1686424562
260},
261{
262"text": "https://github.com/jonathantneal/svg4everybody",
263"priority": "medium",
264"creation": 1686424574
265}
266]
267},
268{
269"text": "Using embedded templates #14",
270"priority": "medium",
271"creation": 1686424604,
272"completion": 1718022029
273},
274{
275"text": "Config refactoring #13",
276"priority": "high",
277"creation": 1686424646,
278"completion": 1687609017
279},
280{
281"text": "After new comment #12",
282"priority": "medium",
283"creation": 1686424677,
284"completion": 1688076899,
285"tasks": [
286{
287"text": "geolocation",
288"priority": "medium",
289"creation": 1686424694,
290"completion": 1687021550
291},
292{
293"text": "email",
294"priority": "medium",
295"creation": 1686424698
296},
297{
298"text": "telegram notification",
299"priority": "medium",
300"creation": 1686424710,
301"completion": 1686424726
302}
303]
304},
305{
306"text": "Add telegram instant view",
307"priority": "verylow",
308"creation": 1686463040
309},
310{
311"text": "Remove old SyntaxHighlighter",
312"priority": "low",
313"creation": 1686463740,
314"completion": 1687097463
315},
316{
317"text": "Lists of most viewed articles on the statistics page",
318"priority": "medium",
319"creation": 1686466487,
320"completion": 1688938315
321},
322{
323"text": "Responsive images",
324"priority": "high",
325"creation": 1686470744,
326"completion": 1690025136,
327"tasks": [
328{
329"text": "https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images",
330"priority": "medium",
331"creation": 1686470769
332},
333{
334"text": "https://html.spec.whatwg.org/multipage/embedded-content.html#element-attrdef-img-srcset",
335"priority": "medium",
336"creation": 1686470781
337},
338{
339"text": "example: https://xeiaso.net/blog/site-update-v3",
340"priority": "low",
341"creation": 1687503586
342},
343{
344"text": "example: https://clivern.com/how-to-connect-arduino-with-a-raspberry-pi-over-a-serial-port/",
345"priority": "low",
346"creation": 1687622203
347},
348{
349"text": "Подготовка изображений из оригинального (при процессинге статьи)",
350"priority": "medium",
351"creation": 1687595434,
352"completion": 1689613628
353},
354{
355"text": "example: https://joppe.dev/2020/06/17/behaviour-driven-development-basics/",
356"priority": "low",
357"creation": 1687861534
358},
359{
360"text": "https://cloudfour.com/thinks/responsive-images-101-definitions/",
361"priority": "medium",
362"creation": 1689018647
363},
364{
365"text": "https://css-tricks.com/a-guide-to-the-responsive-images-syntax-in-html/",
366"priority": "medium",
367"creation": 1689065712
368},
369{
370"text": "http://www.useragentman.com/tests/html5ImageConverter/examples/dice-compare/drag-test.html",
371"priority": "medium",
372"creation": 1689098058
373},
374{
375"text": "Перенести фон сайдабара в стили страницы, учитывать media query",
376"priority": "medium",
377"creation": 1689101418,
378"completion": 1689769919,
379"tasks": [
380{
381"text": "синхронизировать фон сайдбара и картинку в записи",
382"priority": "medium",
383"creation": 1689316299
384},
385{
386"text": "Альтернативная картинка может быть больше",
387"priority": "medium",
388"creation": 1689613755
389}
390]
391},
392{
393"text": "Optimization: https://kinsta.com/blog/optimize-images-for-web/",
394"priority": "verylow",
395"creation": 1689144065
396},
397{
398"text": "https://css-tricks.com/using-webp-images/",
399"priority": "medium",
400"creation": 1689529382
401},
402{
403"text": "Проверка веса альтернативных картинок, исходная может быть легче",
404"priority": "medium",
405"creation": 1689533411,
406"completion": 1689613555
407},
408{
409"text": "Optimization: https://www.freshleafmedia.co.uk/blog/automatically-find-best-image-compression",
410"priority": "verylow",
411"creation": 1689684050
412},
413{
414"text": "Трактор и face.jpg",
415"priority": "medium",
416"creation": 1690045109
417}
418]
419},
420{
421"text": "500-е ошибки в телеграм-уведомлениях",
422"priority": "high",
423"creation": 1686479219,
424"completion": 1686763560
425},
426{
427"text": "Более светлый плейсхолдер в форме",
428"priority": "medium",
429"creation": 1686581926,
430"completion": 1686730632
431},
432{
433"text": "microformats",
434"priority": "low",
435"creation": 1686771422,
436"completion": 1719175149,
437"tasks": [
438{
439"text": "https://microformats.org/",
440"priority": "medium",
441"creation": 1686771515
442},
443{
444"text": "http://pin13.net/",
445"priority": "medium",
446"creation": 1686771529
447}
448]
449},
450{
451"text": "Регистрация пользователей для комментариев",
452"priority": "high",
453"creation": 1686772368,
454"tasks": [
455{
456"text": "Через соц-сети и т.п.",
457"priority": "medium",
458"creation": 1686772409,
459"tasks": [
460{
461"text": "Yandex",
462"priority": "medium",
463"creation": 1722616679,
464"completion": 1725090773,
465"tasks": [
466{
467"text": "https://yandex.ru/id/business",
468"priority": "medium",
469"creation": 1722616719
470},
471{
472"text": "https://yandex.ru/dev/id/doc/ru/",
473"priority": "medium",
474"creation": 1722616732
475},
476{
477"text": "https://github.com/rakeev/oauth2-yandex",
478"priority": "low",
479"creation": 1725168084
480}
481]
482},
483{
484"text": "VK",
485"priority": "medium",
486"creation": 1722886491,
487"completion": 1725700036,
488"tasks": [
489{
490"text": "https://dev.vk.com/ru/vkid",
491"priority": "low",
492"creation": 1725132927
493},
494{
495"text": "https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/start-integration/auth-without-sdk-web",
496"priority": "low",
497"creation": 1725133380
498},
499{
500"text": "https://github.com/j4k/oauth2-vkontakte",
501"priority": "low",
502"creation": 1725168158
503}
504]
505}
506]
507},
508{
509"text": "Log in with OpenID",
510"priority": "medium",
511"creation": 1717673795
512},
513{
514"text": "Страница профиля",
515"priority": "medium",
516"creation": 1722579787,
517"tasks": [
518{
519"text": "Загрузка аватара",
520"priority": "medium",
521"creation": 1722579856,
522"tasks": [
523{
524"text": "Avatar for techbot",
525"priority": "medium",
526"creation": 1723368044,
527"completion": 1724496039,
528"tasks": [
529{
530"text": "https://lexica.art/prompt/537c8c95-2bb5-4730-9cbc-fff04cc26aee",
531"priority": "low",
532"creation": 1723368066
533},
534{
535"text": "https://lexica.art/prompt/50c096de-8ea3-4dc3-981a-67f1fff4d1fd",
536"priority": "low",
537"creation": 1723368445
538}
539]
540},
541{
542"text": "Бекап картинок",
543"priority": "medium",
544"creation": 1724496203
545}
546]
547},
548{
549"text": "Емейл и подтверждение",
550"priority": "medium",
551"creation": 1722579887,
552"tasks": [
553{
554"text": "Возможность отписаться от писем",
555"priority": "medium",
556"creation": 1724224680
557},
558{
559"text": "Скрывать фейковый емейл",
560"priority": "medium",
561"creation": 1724267774
562}
563]
564},
565{
566"text": "Сбросить пароль",
567"priority": "medium",
568"creation": 1722579923
569},
570{
571"text": "Обновить комментарии после редактирования профиля",
572"priority": "medium",
573"creation": 1724224640,
574"completion": 1724700260
575}
576]
577},
578{
579"text": "Разделить админские права и обычных пользователей",
580"priority": "medium",
581"creation": 1722579824,
582"completion": 1725031341
583},
584{
585"text": "Аватар в сайдбаре навигации",
586"priority": "medium",
587"creation": 1722629150,
588"completion": 1724524471,
589"tasks": [
590{
591"text": "Проверить Gravatar, если аватара нет",
592"priority": "medium",
593"creation": 1722886402
594},
595{
596"text": "Учёт пола для аватара и в админке",
597"priority": "medium",
598"creation": 1723232746,
599"completion": 1723491203
600}
601]
602},
603{
604"text": "Redirect to referer",
605"priority": "medium",
606"creation": 1723407736,
607"completion": 1723491219
608},
609{
610"text": "Страница пользователя",
611"priority": "medium",
612"creation": 1723528272,
613"tasks": [
614{
615"text": "Дата регистрации",
616"priority": "medium",
617"creation": 1723528301
618},
619{
620"text": "Список комментариев",
621"priority": "medium",
622"creation": 1723528312
623},
624{
625"text": "RSS комментариев пользователя",
626"priority": "medium",
627"creation": 1723528387
628}
629]
630},
631{
632"text": "Форма регистрация",
633"priority": "medium",
634"creation": 1724694192,
635"tasks": [
636{
637"text": "Отправлять ссылку подтверждения на почту, создание пользователя после",
638"priority": "medium",
639"creation": 1724694249
640}
641]
642}
643]
644},
645{
646"text": "Default image for feeds (for example https://feedly.com)",
647"priority": "medium",
648"creation": 1686847532,
649"completion": 1717854684,
650"tasks": [
651{
652"text": "example: https://apps.timwhitlock.info/unicode/inspect?s=%E2%99%82",
653"priority": "low",
654"creation": 1687851554
655},
656{
657"text": "example: https://joppe.dev/2020/06/17/behaviour-driven-development-basics/",
658"priority": "low",
659"creation": 1687861639
660},
661{
662"text": "https://ogp.me/",
663"priority": "medium",
664"creation": 1691399050,
665"completion": 1692039269
666},
667{
668"text": "https://json-ld.org/",
669"priority": "medium",
670"creation": 1691400523
671},
672{
673"text": "https://okbinteractive.studio/en/insights/what-are-open-graph-metatags-and-how-to-use-them-in-web-pages",
674"priority": "medium",
675"creation": 1692028935,
676"completion": 1692039271
677},
678{
679"text": "https://www.rssboard.org/rss-specification#ltenclosuregtSubelementOfLtitemgt",
680"priority": "high",
681"creation": 1717519919
682},
683{
684"text": "example: https://sazak.io/rss.xml",
685"priority": "low",
686"creation": 1717519989
687},
688{
689"text": "Best practises https://kevincox.ca/2022/05/06/rss-feed-best-practices/",
690"priority": "medium",
691"creation": 1717850917
692}
693]
694},
695{
696"text": "Использовать один docker-контейнер для приложения и nodejs",
697"priority": "high",
698"creation": 1687069175,
699"completion": 1687169518
700},
701{
702"text": "Graceful shutdown",
703"priority": "medium",
704"creation": 1687236055,
705"completion": 1717935837,
706"tasks": [
707{
708"text": "https://www.rudderstack.com/blog/implementing-graceful-shutdown-in-go/",
709"priority": "medium",
710"creation": 1687236073
711},
712{
713"text": "https://github.com/GolangLessons/sso/blob/main/cmd/sso/main.go",
714"priority": "medium",
715"creation": 1717673156
716},
717{
718"text": "https://github.com/mattermost/mattermost/blob/master/server/cmd/mattermost/commands/server.go",
719"priority": "medium",
720"creation": 1717673268
721}
722]
723},
724{
725"text": "Проверить протухшие ссылки у комментаторов",
726"priority": "medium",
727"creation": 1687968750,
728"completion": 1689009802
729},
730{
731"text": "Use ETag for avatar",
732"priority": "high",
733"creation": 1688036716,
734"completion": 1688041076
735},
736{
737"text": "User authentication",
738"priority": "high",
739"creation": 1688249143,
740"completion": 1688919125,
741"tasks": [
742{
743"text": "login: https://colorlib.com/wp/cat/login-forms/",
744"priority": "low",
745"creation": 1688249245,
746"completion": 1688801221
747},
748{
749"text": "session by secure cookie",
750"priority": "medium",
751"creation": 1688278184,
752"completion": 1688591205,
753"tasks": [
754{
755"text": "Sign cookie value",
756"priority": "medium",
757"creation": 1688422511,
758"completion": 1688582013
759},
760{
761"text": "encrypt/decrypt value",
762"priority": "medium",
763"creation": 1688422544
764},
765{
766"text": "check session expiration",
767"priority": "medium",
768"creation": 1688582203,
769"completion": 1688585748
770}
771]
772},
773{
774"text": "Login user",
775"priority": "medium",
776"creation": 1688422755,
777"tasks": [
778{
779"text": "Update last login and logins count",
780"priority": "medium",
781"creation": 1688422798,
782"completion": 1688552577
783},
784{
785"text": "flash message",
786"priority": "medium",
787"creation": 1688422875,
788"completion": 1688505709
789},
790{
791"text": "Success flash",
792"priority": "medium",
793"creation": 1688552607,
794"completion": 1688642371
795},
796{
797"text": "Redirect to referer",
798"priority": "medium",
799"creation": 1688801195,
800"completion": 1688919125
801}
802]
803}
804]
805},
806{
807"text": "Self-update",
808"priority": "verylow",
809"creation": 1716815729
810},
811{
812"text": "Add JSON-feed",
813"priority": "low",
814"creation": 1717520159
815},
816{
817"text": "Статические страницы в sitemap.xml",
818"priority": "medium",
819"creation": 1718047085,
820"completion": 1719737452
821},
822{
823"text": "About page",
824"priority": "medium",
825"creation": 1718173013,
826"completion": 1718918135,
827"tasks": [
828{
829"text": "parse markdown",
830"priority": "medium",
831"creation": 1718173041,
832"completion": 1718718031,
833"tasks": [
834{
835"text": "https://github.com/gomarkdown/markdown",
836"priority": "medium",
837"creation": 1718175469
838},
839{
840"text": "https://github.com/yuin/goldmark",
841"priority": "medium",
842"creation": 1718175485
843},
844{
845"text": "https://github.com/russross/blackfriday",
846"priority": "medium",
847"creation": 1718175501
848}
849]
850},
851{
852"text": "add job history",
853"priority": "medium",
854"creation": 1718173054
855}
856]
857},
858{
859"text": "Раздел проекты",
860"priority": "medium",
861"creation": 1719561865,
862"tasks": [
863{
864"text": "Список проектов",
865"priority": "medium",
866"creation": 1719561913
867},
868{
869"text": "Страницы проектов",
870"priority": "medium",
871"creation": 1719561925,
872"tasks": [
873{
874"text": "Markdown + meta-info",
875"priority": "medium",
876"creation": 1719561967
877},
878{
879"text": "golang import info (if necessary)",
880"priority": "medium",
881"creation": 1719562055
882},
883{
884"text": "golang doc generation (if necessary)",
885"priority": "medium",
886"creation": 1719562119
887}
888]
889}
890]
891},
892{
893"text": "Сгенерировать новые иконки, вроде apple-icon-72x72.png",
894"priority": "medium",
895"creation": 1720156455,
896"completion": 1720376414
897},
898{
899"text": "5 неудачных попыток ввода пароля и блокировка на полчаса",
900"priority": "medium",
901"creation": 1720600352
902},
903{
904"text": "New favicons",
905"priority": "medium",
906"creation": 1720767768,
907"tasks": [
908{
909"text": "Multiple sizes in .ico file",
910"priority": "medium",
911"creation": 1720767810
912},
913{
914"text": "https://stackoverflow.com/questions/9150691/how-to-have-multiple-favicon-sizes-yet-serve-only-a-16x16-by-default",
915"priority": "low",
916"creation": 1720767840
917},
918{
919"text": "https://jec.fish/blog/favicons-manifest",
920"priority": "low",
921"creation": 1720767857
922},
923{
924"text": "https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs",
925"priority": "low",
926"creation": 1720767875
927}
928]
929},
930{
931"text": "Slow server processing",
932"priority": "medium",
933"creation": 1721379002,
934"completion": 1724483589,
935"tasks": [
936{
937"text": "https://docs.nginx.com/nginx/admin-guide/monitoring/logging/",
938"priority": "low",
939"creation": 1721416205
940},
941{
942"text": "https://nginx.org/en/docs/http/ngx_http_log_module.html",
943"priority": "low",
944"creation": 1721416242
945}
946]
947},
948{
949"text": "handlers.AddCommentDummy for production environment (for testing purposes)",
950"priority": "medium",
951"creation": 1722926032
952},
953{
954"text": "Change project structure",
955"priority": "medium",
956"creation": 1722945494
957},
958{
959"text": "Replace router library to github.com/go-chi/chi",
960"priority": "medium",
961"creation": 1723123796,
962"completion": 1726084432
963},
964{
965"text": "месяцы на русском в статьях, статистике и т.п.",
966"priority": "medium",
967"creation": 1723749545,
968"completion": 1723882299
969},
970{
971"text": "Fix fonts for headers for MacOS/Windows",
972"priority": "medium",
973"creation": 1726248015,
974"completion": 1728066454,
975"tasks": [
976{
977"text": "https://www.cssfontstack.com",
978"priority": "low",
979"creation": 1728025755
980}
981]
982},
983{
984"text": "Add webp for avatar",
985"priority": "medium",
986"creation": 1726304408,
987"tasks": [
988{
989"text": "Support webp for external user providers",
990"priority": "medium",
991"creation": 1726304442
992},
993{
994"text": "https://github.com/nickalie/go-webpbin",
995"priority": "low",
996"creation": 1726306865
997},
998{
999"text": "https://github.com/gen2brain/webp",
1000"priority": "low",
1001"creation": 1726306886
1002},
1003{
1004"text": "https://github.com/gen2brain/avif",
1005"priority": "low",
1006"creation": 1726306897
1007},
1008{
1009"text": "https://github.com/kolesa-team/go-webp",
1010"priority": "low",
1011"creation": 1726307124
1012}
1013]
1014},
1015{
1016"text": "reduce CSS size",
1017"priority": "medium",
1018"creation": 1728148627,
1019"tasks": [
1020{
1021"text": "https://www.smashingmagazine.com/2021/08/refactoring-css-optimizing-size-performance-part3/",
1022"priority": "low",
1023"creation": 1728148649
1024},
1025{
1026"text": "https://prototyp.digital/blog/improving-css-performance-and-file-size-an-in-depth-guide",
1027"priority": "low",
1028"creation": 1728148661
1029}
1030]
1031}
1032]
1033}