diff --git a/demo/amend_old_commit-compressed.gif b/demo/amend_old_commit-compressed.gif new file mode 100644 index 000000000..547d4c67d Binary files /dev/null and b/demo/amend_old_commit-compressed.gif differ diff --git a/demo/amend_old_commit.gif b/demo/amend_old_commit.gif new file mode 100644 index 000000000..ce71550dc Binary files /dev/null and b/demo/amend_old_commit.gif differ diff --git a/demo/amend_old_commit.yml b/demo/amend_old_commit.yml new file mode 100644 index 000000000..4fee2e0e1 --- /dev/null +++ b/demo/amend_old_commit.yml @@ -0,0 +1,223 @@ +# The configurations that used for the recording, feel free to edit them +config: + + # Specify a command to be executed + # like `/bin/bash -l`, `ls`, or any other commands + # the default is bash for Linux + # or powershell.exe for Windows + command: go run cmd/integration_test/main.go cli --slow pkg/integration/tests/demo/amend_old_commit.go + + # Specify the current working directory path + # the default is the current working directory path + cwd: /Users/jesseduffieldduffield/repos/lazygit + + # Export additional ENV variables + env: + recording: true + + # Explicitly set the number of columns + # or use `auto` to take the current + # number of columns of your shell + cols: 120 # 100 + + # Explicitly set the number of rows + # or use `auto` to take the current + # number of rows of your shell + rows: 35 # 30 + + # Amount of times to repeat GIF + # If value is -1, play once + # If value is 0, loop indefinitely + # If value is a positive number, loop n times + repeat: 0 + + # Quality + # 1 - 100 + # Higher quality seems to make no difference, but running it through + # gifsicle ends up with a much better compressed version. + quality: 100 + + # Delay between frames in ms + # If the value is `auto` use the actual recording delays + frameDelay: auto + + # Maximum delay between frames in ms + # Ignored if the `frameDelay` isn't set to `auto` + # Set to `auto` to prevent limiting the max idle time + maxIdleTime: 2000 + + # The surrounding frame box + # The `type` can be null, window, floating, or solid` + # To hide the title use the value null + # Don't forget to add a backgroundColor style with a null as type + frameBox: + type: floating + title: Lazygit + style: + border: 0px black solid + backgroundColor: "#1d1d1d" + margin: -5px + + # Add a watermark image to the rendered gif + # You need to specify an absolute path for + # the image on your machine or a URL, and you can also + # add your own CSS styles + watermark: + imagePath: null + style: + position: absolute + right: 15px + bottom: 15px + width: 100px + opacity: 0.9 + + # Cursor style can be one of + # `block`, `underline`, or `bar` + cursorStyle: block + + # Font family + # You can use any font that is installed on your machine + # in CSS-like syntax + fontFamily: "DejaVuSansMono Nerd Font" + + # The size of the font + fontSize: 8 + + # The height of lines + lineHeight: 1 + + # The spacing between letters + letterSpacing: 0 + + # Theme + theme: + background: "transparent" + foreground: "#dddad6" + cursor: "#c7c7c7" + black: "#7a7a7a" + red: "#fc4384" + green: "#b3e33b" + yellow: "#ffa727" + blue: "#102895" + magenta: "#c930c7" + cyan: "#00c5c7" + white: "#c7c7c7" + brightBlack: "#676767" + brightRed: "#ff7fac" + brightGreen: "#c8ed71" + brightYellow: "#ebdf86" + brightBlue: "#6871ff" + brightMagenta: "#ff76ff" + brightCyan: "#5ffdff" + brightWhite: "#fffefe" + +# Records, feel free to edit them +records: + - delay: 1257 + content: '^[[<35;75;31M^[[<35;74;31M^[[O' + - delay: 6410 + content: "\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?2004l\e[?1049h\e[22;0;0t\e[?1h\e=\e[?25l\e[H\e[2J\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?1000h\e[?1002h\e[?1003h\e[?1006h\e[?1004h" + - delay: 103 + content: "\e[?25l\e[1;1H\e(B\e[m\e[30m\e]8;;\e\\┌─Status───────────────────────────────┐┌─Diff─────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e(B\e[m\e[32m\e]8;;\e\\✓\e(B\e[m\e]8;;\e\\ repo → \e(B\e[m\e[32m\e]8;;\e\\feature/demo\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\No changed files \e(B\e[m\e[30m\e]8;;\e\\│\e[3;1H└──────────────────────────────────────┘│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[4;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Files \e(B\e[m\e]8;;\e\\- Worktrees - Submodules\e(B\e[m\e[32m\e[1m\e]8;;\e\\───────┐\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[5;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[6;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[7;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[8;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[9;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[10;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[11;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[12;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[13;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└──────────────────────────────────────┘\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[14;1H┌─\e(B\e[m\e[32m\e]8;;\e\\Local branches \e(B\e[m\e[30m\e]8;;\e\\- Remotes - Tags──────┐│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[15;1H│\e(B\e[m\e[32m\e]8;;\e\\ *\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\שׂ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\feature/demo\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\✓\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[16;1H│\e(B\e[m\e[36m\e]8;;\e\\1s\e(B\e[m\e]8;;\e\\ שׂ master \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[17;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[18;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[19;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[20;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[21;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[22;1H└───────────────────────────────1 of 2─┘│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[23;1H┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────┐│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[24;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\5facfd26\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Add a user-friendly 404 \e(B\e[m\e[30m\e]8;;\e\\▲│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[25;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\8721a960\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Set up CI/CD pipeline us\e(B\e[m\e[30m\e]8;;\e\\█│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[26;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\86cf6840\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Enable gzip compression \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[27;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\37764ffe\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Refactor error messages \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[28;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\00286e9e\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Improve accessibility of\e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[29;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\4a57e4d3\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Add loading indicators t\e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[30;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\43ed3a37\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Add end-to-end tests for\e(B\e[m\e[30m\e]8;;\e\\▼│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[31;1H└──────────────────────────────1 of 60─┘└──────────────────────────────────────────────────────────────────────────────┘\e[32;1H┌─Stash────────────────────────────────┐┌─Command log──────────────────────────────────────────────────────────────────┐\e[33;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[34;1H└───────────────────────────────0 of 0─┘└──────────────────────────────────────────────────────────────────────────────┘\e[35;1H\e(B\e[m\e[34m\e]8;;\e\\/: Scroll, : Cancel, q: Quit, ?: Keybindings, 1-5: Jump to panel, H/L: Scroll left/right \e[?25l\e[?25l\e[1;43H\e(B\e[m\e[30m\e]8;;\e\\Unstaged changes\e[5;2H\e(B\e[m\e[91;44m\e[1m\e]8;;\e\\ M  navigation/site_navigation.go\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e[6;2H\e(B\e[m\e[31m\e]8;;\e\\??  docs/README.md \e[13;33H\e(B\e[m\e[32m\e[1m\e]8;;\e\\1 of 2\e[?25l" + - delay: 10 + content: "\e[?25l\e[2;42H\e(B\e[m\e[1m\e]8;;\e\\diff --git a/navigation/site_navigation.go b/navigation/site_navigation.go\e[2;120H\e(B\e[m\e[30m\e]8;;\e\\▲\e[3;42H\e(B\e[m\e[1m\e]8;;\e\\index 644e7ed..ba10353 100644\e[3;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[4;42H\e(B\e[m\e[1m\e]8;;\e\\--- a/navigation/site_navigation.go\e[4;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[5;42H\e(B\e[m\e[1m\e]8;;\e\\+++ b/navigation/site_navigation.go\e[5;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[6;42H\e(B\e[m\e[36m\e]8;;\e\\@@ -1 +1,5 @@\e[6;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[7;42H\e(B\e[m\e[31m\e]8;;\e\\-package navigation\e[7;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[8;42H\e(B\e[m\e]8;;\e\\\\\e[8;44HNo\e[8;47Hnewline\e[8;55Hat\e[8;58Hend\e[8;62Hof\e[8;65Hfile\e[8;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[9;42H\e(B\e[m\e[32m\e]8;;\e\\+package navigation\e[9;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[10;42H\e(B\e[m\e[32m\e]8;;\e\\+\e[10;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[11;42H\e(B\e[m\e[32m\e]8;;\e\\+func Navigate() {\e[11;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[12;42H\e(B\e[m\e[32m\e]8;;\e\\+\e[12;46Hpanic(\"unimplemented\")\e[12;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[13;42H\e(B\e[m\e[32m\e]8;;\e\\+}\e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;42H\e(B\e[m\e]8;;\e\\\\\e[14;44HNo\e[14;47Hnewline\e[14;55Hat\e[14;58Hend\e[14;62Hof\e[14;65Hfile\e[14;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[15;120H█\e[16;120H█\e[17;120H█\e[18;120H█\e[19;120H█\e[20;120H█\e[30;120H▼\e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\Amend\e[35;7Han\e[35;10Hold\e[35;14Hcommit\e[?25l" + - delay: 1002 + content: "\e[?25l\e[35;21H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing \e[?25l" + - delay: 31 + content: "\e[?25l\e[1;43H\e(B\e[m\e[30m\e]8;;\e\\Staged changes──\e[2;42H\e(B\e[m\e]8;;\e\\ \e[2;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[3;42H\e(B\e[m\e]8;;\e\\ \e[3;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[4;42H\e(B\e[m\e]8;;\e\\ \e[4;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[5;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\M  navigation/site_navigation.go\e[5;42H\e(B\e[m\e]8;;\e\\ \e[5;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[6;42H\e(B\e[m\e]8;;\e\\ \e[6;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[7;42H\e(B\e[m\e]8;;\e\\ \e[7;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[8;42H\e(B\e[m\e]8;;\e\\ \e[8;44H \e[8;47H \e[8;55H \e[8;58H \e[8;62H \e[8;65H \e[8;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[9;42H\e(B\e[m\e]8;;\e\\ \e[9;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[10;42H\e(B\e[m\e]8;;\e\\ \e[10;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[11;42H\e(B\e[m\e]8;;\e\\ \e[11;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[12;42H\e(B\e[m\e]8;;\e\\ \e[12;46H \e[12;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[13;42H\e(B\e[m\e]8;;\e\\ \e[13;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[14;42H\e(B\e[m\e]8;;\e\\ \e[14;44H \e[14;47H \e[14;55H \e[14;58H \e[14;62H \e[14;65H \e[14;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[15;120H│\e[16;120H│\e[17;120H│\e[18;120H│\e[19;120H│\e[20;120H│\e[30;120H│\e[33;44H\e(B\e[m\e]8;;\e\\git\e[33;48Hadd\e[33;52H--\e[33;55Hnavigation/site_navigation.go\e[?25l\e[?25l\e[?25l" + - delay: 8 + content: "\e[?25l\e[2;42H\e(B\e[m\e[1m\e]8;;\e\\diff --git a/navigation/site_navigation.go b/navigation/site_navigation.go\e[2;120H\e(B\e[m\e[30m\e]8;;\e\\▲\e[3;42H\e(B\e[m\e[1m\e]8;;\e\\index 644e7ed..ba10353 100644\e[3;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[4;42H\e(B\e[m\e[1m\e]8;;\e\\--- a/navigation/site_navigation.go\e[4;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[5;42H\e(B\e[m\e[1m\e]8;;\e\\+++ b/navigation/site_navigation.go\e[5;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[6;42H\e(B\e[m\e[36m\e]8;;\e\\@@ -1 +1,5 @@\e[6;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[7;42H\e(B\e[m\e[31m\e]8;;\e\\-package navigation\e[7;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[8;42H\e(B\e[m\e]8;;\e\\\\\e[8;44HNo\e[8;47Hnewline\e[8;55Hat\e[8;58Hend\e[8;62Hof\e[8;65Hfile\e[8;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[9;42H\e(B\e[m\e[32m\e]8;;\e\\+package navigation\e[9;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[10;42H\e(B\e[m\e[32m\e]8;;\e\\+\e[10;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[11;42H\e(B\e[m\e[32m\e]8;;\e\\+func Navigate() {\e[11;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[12;42H\e(B\e[m\e[32m\e]8;;\e\\+\e[12;46Hpanic(\"unimplemented\")\e[12;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[13;42H\e(B\e[m\e[32m\e]8;;\e\\+}\e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;42H\e(B\e[m\e]8;;\e\\\\\e[14;44HNo\e[14;47Hnewline\e[14;55Hat\e[14;58Hend\e[14;62Hof\e[14;65Hfile\e[14;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[15;120H█\e[16;120H█\e[17;120H█\e[18;120H█\e[19;120H█\e[20;120H█\e[30;120H▼\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;30H\e(B\e[m\e[36m\e[1m\e]8;;\e\\4 \e[?25l\e[?25l\e[1;43H\e(B\e[m\e[30m\e]8;;\e\\Patch─────────\e[4;1H┌─\e(B\e[m\e[32m\e]8;;\e\\Files \e(B\e[m\e[30m\e]8;;\e\\- Worktrees - Submodules───────┐\e[5;1H│\e(B\e[m\e[32m\e]8;;\e\\M  navigation/site_navigation.go\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[6;1H│\e[6;40H│\e[7;1H│\e[7;40H│\e[8;1H│\e[8;40H│\e[9;1H│\e[9;40H│\e[10;1H│\e[10;40H│\e[11;1H│\e[11;40H│\e[12;1H│\e[12;40H│\e[13;1H└───────────────────────────────1 of 2─┘\e[23;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────┐\e[24;1H│\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\5facfd26\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add a user-friendly 404 \e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[25;1H│\e[25;40H█\e[26;1H│\e[26;40H│\e[27;1H│\e[27;40H│\e[28;1H│\e[28;40H│\e[29;1H│\e[29;40H│\e[30;1H│\e[30;40H▼\e[31;1H└──────────────────────────────1 of 60─┘\e[?25l" + - delay: 11 + content: "\e[?25l\e[2;42H\e(B\e[m\e[33m\e]8;;\e\\commit 5facfd26d12c00df31060362519a9d49bbe42b1d (\e(B\e[m\e[36m\e[1m\e]8;;\e\\HEAD -> \e(B\e[m\e[32m\e[1m\e]8;;\e\\feature/demo\e(B\e[m\e[33m\e]8;;\e\\, \e[3;42H\e(B\e[m\e[31m\e[1m\e]8;;\e\\origin/master\e(B\e[m\e[33m\e]8;;\e\\, \e(B\e[m\e[31m\e[1m\e]8;;\e\\origin/feature/demo\e(B\e[m\e[33m\e]8;;\e\\, \e(B\e[m\e[32m\e[1m\e]8;;\e\\master\e(B\e[m\e[33m\e]8;;\e\\)\e[4;42H\e(B\e[m\e]8;;\e\\Author: CI \e[5;42HDate: Wed Aug 2 22:23:33 2023 +1000\e[6;42H \e[7;42H Add a user-friendly\e[7;66H404\e[7;70Hpage\e[8;42H--- \e[8;47H \e[8;55H \e[8;58H \e[8;62H \e[8;65H \e[9;42H pages/404.html | 1\e[9;62H\e(B\e[m\e[32m\e]8;;\e\\+\e[10;42H\e(B\e[m\e]8;;\e\\ 1\e[10;45Hfile\e[10;50Hchanged,\e[10;59H1\e[10;61Hinsertion(+)\e[11;42H \e[12;42H\e(B\e[m\e[1m\e]8;;\e\\diff --git a/pages/404.html b/pages/404.html\e[13;42Hnew file mode 100644\e[14;42Hindex 0000000..6c70bcf\e[14;65H\e(B\e[m\e]8;;\e\\ \e[15;42H\e(B\e[m\e[1m\e]8;;\e\\--- /dev/null\e[16;42H+++ b/pages/404.html\e[17;42H\e(B\e[m\e[36m\e]8;;\e\\@@ -0,0 +1 @@\e[18;42H\e(B\e[m\e[32m\e]8;;\e\\+\e[19;42H\e(B\e[m\e]8;;\e\\\\\e[19;44HNo\e[19;47Hnewline\e[19;55Hat\e[19;58Hend\e[19;62Hof\e[19;65Hfile\e[19;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[20;120H│\e[?25l" + - delay: 604 + content: "\e[?25l\e[35;21H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[24;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\5facfd26\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Add a user-friendly 404 \e[25;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\8721a960\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Set up CI/CD pipeline us\e[31;32H\e(B\e[m\e[32m\e[1m\e]8;;\e\\2\e[?25l" + - delay: 12 + content: "\e[?25l\e[2;49H\e(B\e[m\e[33m\e]8;;\e\\8721a9601851e8c\e[2;65H153d58573767\e[2;78H458685ad437\e(B\e[m\e]8;;\e\\ \e[3;42HAuthor: CI \e[4;42HDa\e[4;45He: \e[4;50HWed Aug 2 22:23:33 2023\e[4;74H+1000\e[5;42H \e[5;50H \e[5;54H \e[5;58H \e[5;60H \e[5;69H \e[5;74H \e[6;46HSet\e[6;50Hup\e[6;53HCI/CD\e[6;59Hpipeline\e[6;68Husing\e[6;74HGitHub\e[6;81Hactions\e[7;42H---\e[7;46H \e[7;50H \e[7;52H \e[7;66H \e[7;70H \e[8;42H .github/workflows/ci.yml\e[8;68H|\e[8;70H1\e[8;72H\e(B\e[m\e[32m\e]8;;\e\\+\e[9;43H\e(B\e[m\e]8;;\e\\1 file changed, 1 insertion(+)\e[10;43H \e[10;45H \e[10;50H \e[10;59H \e[10;61H \e[11;42H\e(B\e[m\e[1m\e]8;;\e\\diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml\e[12;42Hnew file mode 10064\e[12;62H\e(B\e[m\e]8;;\e\\ \e[13;42H\e(B\e[m\e[1m\e]8;;\e\\index 0000000..29f9c6d\e[14;42H--- /dev/null\e(B\e[m\e]8;;\e\\ \e[15;42H\e(B\e[m\e[1m\e]8;;\e\\+++\e[15;46Hb/.github/workflows/ci.yml\e[16;42H\e(B\e[m\e[36m\e]8;;\e\\@@ -0,0 +1 @@\e(B\e[m\e]8;;\e\\ \e[17;42H\e(B\e[m\e[32m\e]8;;\e\\+name: CI\e(B\e[m\e]8;;\e\\ \e[18;42H\\ No newline at\e[18;58Hend\e[18;62Hof\e[18;65Hfile\e[19;42H \e[19;44H \e[19;47H \e[19;55H \e[19;58H \e[19;62H \e[19;65H \e[19;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[?25l" + - delay: 122 + content: "\e[?25l\e[?25l\e[?25l\e[25;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\8721a960\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Set up CI/CD pipeline us\e[26;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\86cf6840\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Enable gzip compression \e[31;32H\e(B\e[m\e[32m\e[1m\e]8;;\e\\3\e[?25l" + - delay: 13 + content: "\e[?25l\e[2;50H\e(B\e[m\e[33m\e]8;;\e\\6cf684\e[2;57H531c0c755f0cb6e20\e[2;75He63ecf0f46\e[2;86H313\e[6;46H\e(B\e[m\e]8;;\e\\Enable\e[6;53Hgzip com\e[6;62Hression for\e[6;74Hfaster\e[6;81Hpage loads\e[8;43Hperformance/gzip_compression.go\e[8;75H|\e[8;77H1\e[8;79H\e(B\e[m\e[32m\e]8;;\e\\+\e[11;55H\e(B\e[m\e[1m\e]8;;\e\\performance/gzip_compression.go b/performance/gzip_compression.go\e[13;57H513fb44\e[15;48Hperformance/gzip_compression.go\e[17;43H\e(B\e[m\e[32m\e]8;;\e\\p\e[17;45Hckage performance\e[?25l" + - delay: 124 + content: "\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[26;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\86cf6840\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Enable gzip compression \e[27;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\37764ffe\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Refactor error messages \e[31;32H\e(B\e[m\e[32m\e[1m\e]8;;\e\\4\e[?25l" + - delay: 16 + content: "\e[?25l\e[2;49H\e(B\e[m\e[33m\e]8;;\e\\37764ffe8\e[2;59H9\e[2;61H8534\e[2;66H85a3\e[2;71H10cc\e[2;76H2188212fa006b\e[6;46H\e(B\e[m\e]8;;\e\\Refactor error mes\e[6;65Hages\e[6;74Hbet\e[6;81Hclarity \e[8;43Her\e[8;46Hor/error_messages.go | 1 \e(B\e[m\e[32m\e]8;;\e\\+\e(B\e[m\e]8;;\e\\ \e[8;75H \e[8;77H \e[8;79H \e[11;55H\e(B\e[m\e[1m\e]8;;\e\\er\e[11;58Hor/error_messages.go b/error/erro\e[11;92H_messag\e[11;100Hs.go\e(B\e[m\e]8;;\e\\ \e[13;57H\e(B\e[m\e[1m\e]8;;\e\\c68838f\e[15;48Her\e[15;51Hor/error_messages.go\e(B\e[m\e]8;;\e\\ \e[17;51H\e(B\e[m\e[32m\e]8;;\e\\er\e[17;54Hor\e(B\e[m\e]8;;\e\\ \e[?25l" + - delay: 125 + content: "\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[27;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\37764ffe\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Refactor error messages \e[28;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\00286e9e\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Improve accessibility of\e[31;32H\e(B\e[m\e[32m\e[1m\e]8;;\e\\5\e[?25l" + - delay: 21 + content: "\e[?25l\e[2;49H\e(B\e[m\e[33m\e]8;;\e\\00286e9\e[2;57Ha8d8cbe6f6db2fefa0be545\e[2;81Hcf454697\e[6;46H\e(B\e[m\e]8;;\e\\Improve accessibility of site navigation \e[8;43Hnavigation/site_navigation.go\e[8;73H|\e[8;75H1\e[8;77H\e(B\e[m\e[32m\e]8;;\e\\+\e[11;55H\e(B\e[m\e[1m\e]8;;\e\\navigation/site_navigation.go b\e[11;87Hnavigation/site_navigation.go\e[13;57H644e7ed\e[15;48Hnavigation/site_navigation.go\e[17;51H\e(B\e[m\e[32m\e]8;;\e\\navigation\e[?25l" + - delay: 623 + content: "\e[?25l\e[35;21H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing A \e[?25l\e[?25l\e[16;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Amend commit──────────────────────────────────────────────────────────────────┐\e[17;21H│\e(B\e[m\e[1m\e]8;;\e\\Are you sure you want to amend this commit with your staged files? \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;21H└───────────────────────────────────────────────────────────────────────────────┘\e[23;1H\e(B\e[m\e[30m\e]8;;\e\\┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────┐\e[24;1H│\e[24;40H▲\e[25;1H│\e[25;40H█\e[26;1H│\e[26;40H│\e[27;1H│\e[27;40H│\e[28;1H│\e[28;40H│\e[29;1H│\e[29;40H│\e[30;1H│\e[30;40H▼\e[31;1H└──────────────────────────────5 of 60─┘\e[?25l" + - delay: 1604 + content: "\e[?25l\e[35;30H\e(B\e[m\e[36m\e[1m\e]8;;\e\\\e[?25l" + - delay: 6 + content: "\e[?25l\e[16;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[36m\e]8;;\e\\@@ -0,0 +1 @@\e(B\e[m\e]8;;\e\\ \e[17;21H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[32m\e]8;;\e\\+package navigation\e(B\e[m\e]8;;\e\\ \e[18;21H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\\\ No newline at end of file \e[23;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────┐\e[24;1H│\e[24;40H▲\e[25;1H│\e[25;40H█\e[26;1H│\e[26;40H│\e[27;1H│\e[27;40H│\e[28;1H│\e[28;40H│\e[29;1H│\e[29;40H│\e[30;1H│\e[30;40H▼\e[31;1H└──────────────────────────────5 of 60─┘\e[33;48H\e(B\e[m\e]8;;\e\\commit\e[33;55H--f\e[33;59Hxup=00286e9ea8d8cbe6f6db2fefa0be5452cf454697\e[?25l" + - delay: 9 + content: "\e[?25l\e[?25l" + - delay: 39 + content: "\e[?25l\e[33;42H\e(B\e[m\e]8;;\e\\merges 4a57e4d3b1e49056a\e[33;67H153b\e[33;73H50435859beb9889\e[33;89H \e[?25l" + - delay: 49 + content: "\e[?25l\e[35;104H\e(B\e[m\e[33m\e]8;;\e\\Rebasing \e(B\e[m\e[33m\e[4m\e]8;;\e\\(Reset) \e[?25l" + - delay: 50 + content: "\e[?25l\e[?25l" + - delay: 65 + content: "\e[?25l\e[35;104H\e(B\e[m\e[36m\e[1m\e]8;;\e\\ \e[?25l" + - delay: 6 + content: "\e[?25l\e[?25l\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[5;2H\e(B\e[m\e[31m\e]8;;\e\\??  docs/README.md \e[6;2H\e(B\e[m\e]8;;\e\\ \e[13;38H\e(B\e[m\e[30m\e]8;;\e\\1\e[?25l" + - delay: 7 + content: "\e[?25l\e[15;21H\e(B\e[m\e[33m\e]8;;\e\\↑5↓5\e[16;2H\e(B\e[m\e[36m\e]8;;\e\\6\e[?25l\e[?25l\e[2;2H\e(B\e[m\e[33m\e]8;;\e\\↑5↓5\e(B\e[m\e]8;;\e\\ repo → \e(B\e[m\e[32m\e]8;;\e\\featur\e[2;21H/demo\e[24;2H\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[24;4H7ef3a9d7\e[24;40H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[25;2H\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[25;4H652eff19\e[25;40H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[26;2H\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[26;4Hfd17bb55\e[27;2Hﰖ\e[27;4Hb9d04669\e[28;2H\e(B\e[m\e[91;44m\e[1m\e]8;;\e\\ﰖ\e[28;4Hf4367161\e[30;40H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[31;32H───────\e[?25l\e[?25l\e[24;40H\e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[25;40H█\e[30;40H▼\e[31;32H5 of 60\e[?25l" + - delay: 11 + content: "\e[?25l\e[2;49H\e(B\e[m\e[33m\e]8;;\e\\f4367161\e[2;58H39af77d7020a\e[2;71Hc783f30e0812e35ce9\e[8;75H\e(B\e[m\e]8;;\e\\5\e[8;78H\e(B\e[m\e[32m\e]8;;\e\\++++\e[9;59H\e(B\e[m\e]8;;\e\\5\e[9;70Hs(+)\e[13;57H\e(B\e[m\e[1m\e]8;;\e\\ba10353\e[16;52H\e(B\e[m\e[36m\e]8;;\e\\,5 @@\e[18;42H\e(B\e[m\e[32m\e]8;;\e\\+\e[18;44H\e(B\e[m\e]8;;\e\\ \e[18;47H \e[18;55H \e[18;58H \e[18;62H \e[18;65H \e[?25l\e[?25l\e[18;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[19;42H\e(B\e[m\e[32m\e]8;;\e\\+func Navigate() {\e[19;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[20;42H\e(B\e[m\e[32m\e]8;;\e\\+\e[20;46Hpanic(\"unimplemented\")\e[21;42H+}\e[22;42H\e(B\e[m\e]8;;\e\\\\\e[22;44HNo\e[22;47Hnewline\e[22;55Hat\e[22;58Hend\e[22;62Hof\e[22;65Hfile\e[?25l" + - delay: 1605 + content: "\e[?25l\e[35;30H\e(B\e[m\e[36m\e[1m\e]8;;\e\\P \e[?25l\e[?25l\e[16;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Force push────────────────────────────────────────────────────────────────────┐\e[17;21H│\e(B\e[m\e[1m\e]8;;\e\\Your branch has diverged from the remote branch. Press to cancel, or \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;21H│\e(B\e[m\e[1m\e]8;;\e\\ to force push. \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[19;21H└───────────────────────────────────────────────────────────────────────────────┘\e[23;1H\e(B\e[m\e[30m\e]8;;\e\\┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────┐\e[24;1H│\e[24;40H▲\e[25;1H│\e[25;40H█\e[26;1H│\e[26;40H│\e[27;1H│\e[27;40H│\e[28;1H│\e[28;40H│\e[29;1H│\e[29;40H│\e[30;1H│\e[30;40H▼\e[31;1H└──────────────────────────────5 of 60─┘\e[?25l" + - delay: 1604 + content: "\e[?25l\e[35;30H\e(B\e[m\e[36m\e[1m\e]8;;\e\\\e[?25l" + - delay: 5 + content: "\e[?25l\e[16;23H\e(B\e[m\e[32m\e[1m\e]8;;\e\\──────────\e[17;22H\e(B\e[m\e[1m\e]8;;\e\\Pushing...\e(B\e[m\e]8;;\e\\ - \e[18;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└───────────────────────────────────────────────────────────────────────────────┘\e[19;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[32m\e]8;;\e\\+func Navigate() {\e(B\e[m\e]8;;\e\\ \e[?25l" + - delay: 12 + content: "\e[?25l\e[?25l" + - delay: 36 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\\\\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\|\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\/\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\-\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\\\\e[?25l" + - delay: 51 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\|\e[?25l" + - delay: 49 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\/\e[?25l" + - delay: 52 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\-\e[?25l" + - delay: 49 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\\\\e[?25l" + - delay: 52 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\|\e[33;42H git push --forc\e[33;60H-with-lease \e[?25l" + - delay: 47 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\/\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\-\e[?25l" + - delay: 66 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\\\\e[33;43H+ 5facfd2...7ef3a9d feature/demo\e[33;76H->\e[33;79Hfeature/demo\e[33;92H(forced\e[33;100Hupdate)\e[?25l" + - delay: 6 + content: "\e[?25l\e[?25l\e[?25l\e[?25l" + - delay: 17 + content: "\e[?25l\e[15;21H\e(B\e[m\e[32m\e]8;;\e\\✓\e(B\e[m\e]8;;\e\\ \e[16;2H\e(B\e[m\e[36m\e]8;;\e\\10s\e[24;40H\e(B\e[m\e[30m\e]8;;\e\\│\e[25;40H│\e[30;40H│\e[31;32H───────\e[?25l\e[?25l\e[2;2H\e(B\e[m\e[32m\e]8;;\e\\✓\e(B\e[m\e]8;;\e\\ repo → \e(B\e[m\e[32m\e]8;;\e\\feature/d\e[2;21Hmo\e(B\e[m\e]8;;\e\\ \e[17;33H|\e[24;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[24;4H7ef3a9d7\e[24;40H\e(B\e[m\e[30m\e]8;;\e\\▲\e[25;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[25;4H652eff19\e[25;40H\e(B\e[m\e[30m\e]8;;\e\\█\e[26;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[26;4Hfd17bb55\e[27;2Hﰖ\e[27;4Hb9d04669\e[28;2H\e(B\e[m\e[93;44m\e[1m\e]8;;\e\\ﰖ\e[28;4Hf4367161\e[30;40H\e(B\e[m\e[30m\e]8;;\e\\▼\e[31;32H5 of 60\e[?25l" + - delay: 7 + content: "\e[?25l\e[16;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[36m\e]8;;\e\\@@ -0,0 +1,5 @@\e(B\e[m\e]8;;\e\\ \e[17;21H \e[17;33H \e[17;40H\e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[32m\e]8;;\e\\+package navigation\e[17;101H\e(B\e[m\e]8;;\e\\ \e[18;21H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[32m\e]8;;\e\\+\e(B\e[m\e]8;;\e\\ \e[23;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────┐\e[24;1H│\e[24;40H▲\e[25;1H│\e[25;40H█\e[26;1H│\e[26;40H│\e[27;1H│\e[27;40H│\e[28;1H│\e[28;40H│\e[29;1H│\e[29;40H│\e[30;1H│\e[30;40H▼\e[31;1H└──────────────────────────────5 of 60─┘\e[?25l" + - delay: 17 + content: "\e[?25l\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;21H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[35;7H \e[35;10H \e[35;14H \e[?25l" + - delay: 2000 + content: "\e[?12l\e[?25h\e[39;49m\e(B\e[m\e[H\e[2J\e[?1049l\e[23;0;0t\e[?1l\e>\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?2004l\e[?1004l" diff --git a/demo/bisect-compressed.gif b/demo/bisect-compressed.gif new file mode 100644 index 000000000..482b2819b Binary files /dev/null and b/demo/bisect-compressed.gif differ diff --git a/demo/bisect.gif b/demo/bisect.gif new file mode 100644 index 000000000..3158ba186 Binary files /dev/null and b/demo/bisect.gif differ diff --git a/demo/bisect.yml b/demo/bisect.yml new file mode 100644 index 000000000..a7e49b536 --- /dev/null +++ b/demo/bisect.yml @@ -0,0 +1,243 @@ +# The configurations that used for the recording, feel free to edit them +config: + + # Specify a command to be executed + # like `/bin/bash -l`, `ls`, or any other commands + # the default is bash for Linux + # or powershell.exe for Windows + command: go run cmd/integration_test/main.go cli --slow pkg/integration/tests/demo/bisect.go + + # Specify the current working directory path + # the default is the current working directory path + cwd: /Users/jesseduffieldduffield/repos/lazygit + + # Export additional ENV variables + env: + recording: true + + # Explicitly set the number of columns + # or use `auto` to take the current + # number of columns of your shell + cols: 120 # 100 + + # Explicitly set the number of rows + # or use `auto` to take the current + # number of rows of your shell + rows: 35 # 30 + + # Amount of times to repeat GIF + # If value is -1, play once + # If value is 0, loop indefinitely + # If value is a positive number, loop n times + repeat: 0 + + # Quality + # 1 - 100 + # Higher quality seems to make no difference, but running it through + # gifsicle ends up with a much better compressed version. + quality: 100 + + # Delay between frames in ms + # If the value is `auto` use the actual recording delays + frameDelay: auto + + # Maximum delay between frames in ms + # Ignored if the `frameDelay` isn't set to `auto` + # Set to `auto` to prevent limiting the max idle time + maxIdleTime: 2000 + + # The surrounding frame box + # The `type` can be null, window, floating, or solid` + # To hide the title use the value null + # Don't forget to add a backgroundColor style with a null as type + frameBox: + type: floating + title: Lazygit + style: + border: 0px black solid + backgroundColor: "#1d1d1d" + margin: -5px + + # Add a watermark image to the rendered gif + # You need to specify an absolute path for + # the image on your machine or a URL, and you can also + # add your own CSS styles + watermark: + imagePath: null + style: + position: absolute + right: 15px + bottom: 15px + width: 100px + opacity: 0.9 + + # Cursor style can be one of + # `block`, `underline`, or `bar` + cursorStyle: block + + # Font family + # You can use any font that is installed on your machine + # in CSS-like syntax + fontFamily: "DejaVuSansMono Nerd Font" + + # The size of the font + fontSize: 8 + + # The height of lines + lineHeight: 1 + + # The spacing between letters + letterSpacing: 0 + + # Theme + theme: + background: "transparent" + foreground: "#dddad6" + cursor: "#c7c7c7" + black: "#7a7a7a" + red: "#fc4384" + green: "#b3e33b" + yellow: "#ffa727" + blue: "#102895" + magenta: "#c930c7" + cyan: "#00c5c7" + white: "#c7c7c7" + brightBlack: "#676767" + brightRed: "#ff7fac" + brightGreen: "#c8ed71" + brightYellow: "#ebdf86" + brightBlue: "#6871ff" + brightMagenta: "#ff76ff" + brightCyan: "#5ffdff" + brightWhite: "#fffefe" + +# Records, feel free to edit them +records: + - delay: 8724 + content: "\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?2004l\e[?1049h\e[22;0;0t\e[?1h\e=\e[?25l\e[H\e[2J" + - delay: 10 + content: "\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?1000h\e[?1002h\e[?1003h\e[?1006h\e[?1004h" + - delay: 94 + content: "\e[?25l\e[1;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\a5cc9c45\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\(HEAD -> feature/demo, origin/master, origin/feature/demo, master)\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add a user-fr\e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[3;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\41e20bf9\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Set up CI/CD pipeline using GitHub actions \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[4;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\e1c8e57d\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enable gzip compression for faster page loads \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[5;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\72e34e08\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor error messages for better clarity \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[6;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\d1993a44\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve accessibility of site navigation \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[7;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\cf82ae63\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add loading indicators to improve UX \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[8;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\099ca1d0\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add end-to-end tests for checkout flow \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[9;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\76ff9ddd\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Fix broken links on the help page \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[10;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\421d5c71\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement automated backups for database \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[11;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\d6348a27\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add TypeScript types to User module \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[12;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\23dc2660\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Move constants to a separate config file \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[13;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\c0988fbd\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance user search with fuzzy matching \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[14;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\abdbae31\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor session management using JWT \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[15;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\c6224692\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure atomicity of transactions in payment system \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[16;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\a2bbeadf\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle database connection failures gracefully \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[17;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\e7503830\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update styles according to new design guidelines \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[18;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\2d3dba16\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Replace deprecated lifecycle methods in React components \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[19;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\635edf39\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Revamp error handling in user registration \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[20;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\25c5d1fe\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle edge case for zero quantity in cart \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[21;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\fcf47a26\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce retry mechanism in network calls \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[22;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\af171bab\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Remove hardcoded values from payment module \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[23;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\d40aed30\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance logging in production environment \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[24;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\9f6bf535\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add internationalization support for German \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[25;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\b99c073b\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update UX of password reset feature \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[26;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\5a71317e\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Migrate legacy codebase to Typescript \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[27;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\163d7f2a\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Resolve race condition in transaction handling \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[28;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\4075d17b\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Harden security of user password storage \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[29;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\975c391b\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement bulk delete feature in admin panel \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[30;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\f94a9251\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure CSRF protection for all forms \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[31;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\bc63a4f0\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce Redis for session management \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[32;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\f038a61c\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve Dockerfile for more efficient builds \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[33;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\4d8a221a\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement user blocking functionality \e(B\e[m\e[32m\e[1m\e]8;;\e\\▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────1 of 60─┘\e[35;1H\e(B\e[m\e[34m\e]8;;\e\\/: Scroll, : Cancel, q: Quit, ?: Keybindings, 1-5: Jump to panel, H/L: Scroll left/right \e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\Git\e[35;5Hbisect\e[?25l" + - delay: 1004 + content: "\e[?25l\e[35;12H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing b \e[?25l" + - delay: 10 + content: "\e[?25l\e[1;1H\e(B\e[m\e[30m\e]8;;\e\\┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e[2;120H▲\e[3;1H│\e[3;120H█\e[4;1H│\e[4;120H█\e[5;1H│\e[5;120H█\e[6;1H│\e[6;120H█\e[7;1H│\e[7;120H█\e[8;1H│\e[8;120H█\e[9;1H│\e[9;120H█\e[10;1H│\e[10;120H█\e[11;1H│\e[11;120H█\e[12;1H│\e[12;120H█\e[13;1H│\e[13;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Bisect────────────────────────────────────────────────────────────────────────┐\e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;1H│\e[14;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[96;44m\e[1m\e]8;;\e\\b\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Mark a5cc9c45 as bad (start bisect) \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[14;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[15;1H│\e[15;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\g\e(B\e[m\e]8;;\e\\ Mark a5cc9c45\e[15;38Has good (s\e[15;49Hart bisect) \e[15;73H \e[15;76H \e[15;84H \e[15;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[15;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[16;1H│\e[16;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\t\e(B\e[m\e]8;;\e\\ Choose bisect\e[16;38Hterms \e[16;47H \e[16;56H \e[16;67H \e[16;76H \e[16;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[16;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[17;1H│\e[17;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ Cancel \e[17;38H \e[17;40H \e[17;47H \e[17;54H \e[17;64H \e[17;67H \e[17;71H \e[17;78H \e[17;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[17;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[18;1H│\e[18;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└────────────────────────────────────────────────────────────────────────1 of 4─┘\e[18;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[19;1H│\e[19;120H│\e[20;1H│\e[20;120H│\e[21;1H│\e[21;120H│\e[22;1H│\e[22;120H│\e[23;1H│\e[23;120H│\e[24;1H│\e[24;120H│\e[25;1H│\e[25;120H│\e[26;1H│\e[26;120H│\e[27;1H│\e[27;120H│\e[28;1H│\e[28;120H│\e[29;1H│\e[29;120H│\e[30;1H│\e[30;120H│\e[31;1H│\e[31;120H│\e[32;1H│\e[32;120H│\e[33;1H│\e[33;120H▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────1 of 60─┘\e[?25l" + - delay: 604 + content: "\e[?25l\e[35;21H\e(B\e[m\e[36m\e[1m\e]8;;\e\\\e[?25l" + - delay: 87 + content: "\e[?25l\e[1;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e(B\e[m\e[91;44m\e[1m\e]8;;\e\\ﰖ\e[2;4Ha5cc9c45\e[2;13H<-- bad\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e[2;37H \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\(HEAD -> f\e[2;59Hature/demo, origin/master, origin\e[2;93Hf\e[2;95Hature/demo, master)\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add a\e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[3;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[3;4H41e20bf9\e[3;13H\e(B\e[m\e]8;;\e\\ \e[3;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[3;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Set u\e[3;54H CI/CD pipeline using GitHub\e[3;83Hactions\e[3;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[4;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[4;4He1c8e57d\e[4;13H\e(B\e[m\e]8;;\e\\ \e[4;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[4;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enable gzip c\e[4;62Hmpression for faster page\e[4;88Hloads\e[4;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[5;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[5;4H72e34e08\e[5;13H\e(B\e[m\e]8;;\e\\ \e[5;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[5;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ R\e[5;50Hfactor error messag\e[5;70Hs for better\e[5;83Hclarity\e[5;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[6;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[6;4Hd1993a44\e[6;13H\e(B\e[m\e]8;;\e\\ \e[6;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[6;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e[6;48H\e(B\e[m\e]8;;\e\\Improve accessibil\e[6;68Hy\e[6;70Hof site navigation\e[6;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[7;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[7;4Hcf82ae63\e[7;13H\e(B\e[m\e]8;;\e\\ \e[7;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[7;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add\e[7;52Hloading indicators to\e[7;74Himprove\e[7;82HUX\e[7;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[8;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[8;4H099ca1d0\e[8;13H\e(B\e[m\e]8;;\e\\ \e[8;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[8;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add end-to-end tests f\e[8;71Hr checkout\e[8;82Hflow\e[8;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[9;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[9;4H76ff9ddd\e[9;13H\e(B\e[m\e]8;;\e\\ \e[9;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[9;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Fix broken links on the help\e[9;77Hpage\e[9;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[10;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[10;4H421d5c71\e[10;13H\e(B\e[m\e]8;;\e\\ \e[10;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[10;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implemen\e[10;57H automated\e[10;68Hbackups for database\e[10;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[11;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[11;4Hd6348a27\e[11;13H\e(B\e[m\e]8;;\e\\ \e[11;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[11;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add TypeScrip\e[11;62H typ\e[11;67Hs\e[11;69Ht\e[11;71H Us\e[11;75Hr\e[11;77Hmodule\e[11;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[12;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[12;4H23dc2660\e[12;13H\e(B\e[m\e]8;;\e\\ \e[12;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[12;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Move const\e[12;59Hnts to a separate config\e[12;84Hfile\e[12;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[13;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[13;4Hc0988fbd\e[13;13H\e(B\e[m\e]8;;\e\\ \e[13;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance user search with fuzzy matching \e[13;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[14;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[14;4Habdbae31\e[14;13H\e(B\e[m\e]8;;\e\\ \e[14;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor session management using JWT \e[14;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[15;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[15;4Hc6224692\e[15;13H\e(B\e[m\e]8;;\e\\ \e[15;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[15;46H◯\e(B\e[m\e]8;;\e\\ Ensure atomicity\e[15;65Hof\e[15;68Htransactions\e[15;81Hin\e[15;84Hpayment\e[15;92Hsystem\e[15;101H \e[15;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[16;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[16;4Ha2bbeadf\e[16;13H\e(B\e[m\e]8;;\e\\ \e[16;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[16;46H◯\e[16;48H\e(B\e[m\e]8;;\e\\Handle\e[16;55Hdatabase\e[16;64Hconnection\e[16;75Hfailures\e[16;84Hgracefully\e[16;101H \e[16;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[17;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[17;4He7503830\e[17;13H\e(B\e[m\e]8;;\e\\ \e[17;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[17;46H◯\e[17;48H\e(B\e[m\e]8;;\e\\Update\e[17;55Hstyles\e[17;62Haccording\e[17;72Hto\e[17;75Hnew\e[17;79Hdesign\e[17;86Hguidelines\e[17;101H \e[17;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[18;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[18;4H2d3dba16\e[18;13H\e(B\e[m\e]8;;\e\\ \e[18;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Replace deprecated lifecycle methods in React components\e[18;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[19;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[19;4H635edf39\e[19;13H\e(B\e[m\e]8;;\e\\ \e[19;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[19;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Revamp error ha\e[19;64Hdling\e[19;70Hin u\e[19;75He\e[19;77H registration\e[19;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[20;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[20;4H25c5d1fe\e[20;13H\e(B\e[m\e]8;;\e\\ \e[20;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[20;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle \e[20;56Hdge case for zero quantity\e[20;83Hin\e[20;86Hcart\e[20;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[21;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[21;4Hfcf47a26\e[21;13H\e(B\e[m\e]8;;\e\\ \e[21;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[21;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce retry \e[21;65Hecha\e[21;70Hism in\e[21;77Hnetwork\e[21;85Hcalls\e[21;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[22;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[22;4Haf171bab\e[22;13H\e(B\e[m\e]8;;\e\\ \e[22;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[22;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Remove hardcoded values from\e[22;77Hpayment\e[22;85Hmodule\e[22;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[23;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[23;4Hd40aed30\e[23;13H\e(B\e[m\e]8;;\e\\ \e[23;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[23;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e[23;48H\e(B\e[m\e]8;;\e\\Enhance\e[23;56Hlogging in producti\e[23;77H \e[23;80Hvironment\e[23;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[24;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[24;4H9f6bf535\e[24;13H\e(B\e[m\e]8;;\e\\ \e[24;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[24;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add \e[24;53Hnternationalization\e[24;73Hsupport for\e[24;85HGerman\e[24;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[25;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[25;4Hb99c073b\e[25;13H\e(B\e[m\e]8;;\e\\ \e[25;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[25;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update UX \e[25;59Hf pas\e[25;65Hword reset\e[25;76Hfeature\e[25;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[26;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[26;4H5a71317e\e[26;13H\e(B\e[m\e]8;;\e\\ \e[26;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[26;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e[26;48H\e(B\e[m\e]8;;\e\\Mi\e[26;51Hrate legacy codebas\e[26;71H to Typescript\e[26;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[27;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[27;4H163d7f2a\e[27;13H\e(B\e[m\e]8;;\e\\ \e[27;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[27;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e[27;48H\e(B\e[m\e]8;;\e\\Resolve race condi\e[27;67Hio\e[27;70H in trans\e[27;80Hctio\e[27;85H handling\e[27;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[28;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[28;4H4075d17b\e[28;13H\e(B\e[m\e]8;;\e\\ \e[28;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[28;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Harden security\e[28;64Hof use\e[28;71H password\e[28;81Hstorage\e[28;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[29;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[29;4H975c391b\e[29;13H\e(B\e[m\e]8;;\e\\ \e[29;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[29;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement bulk delet\e[29;70Hfeature in admin\e[29;87Hpanel\e[29;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[30;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[30;4Hf94a9251\e[30;13H\e(B\e[m\e]8;;\e\\ \e[30;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[30;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure CSRF protection\e[30;74H all\e[30;79Hforms\e[30;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[31;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[31;4Hbc63a4f0\e[31;13H\e(B\e[m\e]8;;\e\\ \e[31;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[31;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce Redi\e[31;63H f\e[31;66Hr\e[31;68Hsession management\e[31;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[32;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[32;4Hf038a61c\e[32;13H\e(B\e[m\e]8;;\e\\ \e[32;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[32;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e[32;48H\e(B\e[m\e]8;;\e\\Improve Docke\e[32;62Hfile for mor\e[32;75H efficient\e[32;86Hbuilds\e[32;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[33;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[33;4H4d8a221a\e[33;13H\e(B\e[m\e]8;;\e\\ \e[33;20H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[33;37H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Impl\e[33;53Hment user blocking functionality\e[33;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────1 of 60─┘\e[35;103H\e(B\e[m\e[32m\e]8;;\e\\Bisecting \e(B\e[m\e[32m\e[4m\e]8;;\e\\(Reset) \e[?25l\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[?25l" + - delay: 605 + content: "\e[?25l\e[35;12H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l" + - delay: 7 + content: "\e[?25l\e[2;2H\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[31m\e]8;;\e\\a5cc9c45\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[31m\e]8;;\e\\<-- bad\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[35m\e[1m\e]8;;\e\\(HEAD -> feature/demo, origin/master, origin/feature/demo, master)\e(B\e[m\e]8;;\e\\ Add a\e[3;2H\e(B\e[m\e[90;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[90;44m\e[1m\e]8;;\e\\41e20bf9\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Set up CI/CD pipeline using GitHub actions \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\2\e[?25l" + - delay: 13 + content: "\e[?25l\e[?25l" + - delay: 121 + content: "\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[3;2H\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\41e20bf9\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Set up CI/CD pipeline using GitHub actions \e[4;2H\e(B\e[m\e[90;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[90;44m\e[1m\e]8;;\e\\e1c8e57d\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Enable gzip compression for faster page loads \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\3\e[?25l" + - delay: 12 + content: "\e[?25l\e[?25l" + - delay: 125 + content: "\e[?25l\e[?25l" + - delay: 9 + content: "\e[?25l\e[4;2H\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\e1c8e57d\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enable gzip compression for faster page loads \e[5;2H\e(B\e[m\e[90;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[90;44m\e[1m\e]8;;\e\\72e34e08\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Refactor error messages for better clarity \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\4\e[?25l" + - delay: 14 + content: "\e[?25l\e[?25l" + - delay: 122 + content: "\e[?25l\e[?25l" + - delay: 7 + content: "\e[?25l\e[5;2H\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\72e34e08\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor error messages for better clarity \e[6;2H\e(B\e[m\e[90;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[90;44m\e[1m\e]8;;\e\\d1993a44\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Improve accessibility of site navigation \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\5\e[?25l" + - delay: 13 + content: "\e[?25l\e[?25l" + - delay: 124 + content: "\e[?25l\e[?25l" + - delay: 9 + content: "\e[?25l\e[6;2H\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\d1993a44\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve accessibility of site navigation \e[7;2H\e(B\e[m\e[90;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[90;44m\e[1m\e]8;;\e\\cf82ae63\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add loading indicators to improve UX \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\6\e[?25l" + - delay: 14 + content: "\e[?25l\e[?25l" + - delay: 122 + content: "\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[7;2H\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\cf82ae63\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add loading indicators to improve UX \e[8;2H\e(B\e[m\e[90;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[90;44m\e[1m\e]8;;\e\\099ca1d0\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add end-to-end tests for checkout flow \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\7\e[?25l" + - delay: 16 + content: "\e[?25l\e[?25l" + - delay: 123 + content: "\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[8;2H\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\099ca1d0\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add end-to-end tests for checkout flow \e[9;2H\e(B\e[m\e[90;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[90;44m\e[1m\e]8;;\e\\76ff9ddd\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Fix broken links on the help page \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\8\e[?25l" + - delay: 11 + content: "\e[?25l\e[?25l" + - delay: 123 + content: "\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[9;2H\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\76ff9ddd\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Fix broken links on the help page \e[10;2H\e(B\e[m\e[90;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[90;44m\e[1m\e]8;;\e\\421d5c71\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Implement automated backups for database \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\9\e[?25l" + - delay: 15 + content: "\e[?25l\e[?25l" + - delay: 123 + content: "\e[?25l\e[?25l" + - delay: 8 + content: "\e[?25l\e[10;2H\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\421d5c71\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement automated backups for database \e[11;2H\e(B\e[m\e[90;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[90;44m\e[1m\e]8;;\e\\d6348a27\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add TypeScript types to User module \e[34;111H\e(B\e[m\e[32m\e[1m\e]8;;\e\\10\e[?25l" + - delay: 12 + content: "\e[?25l\e[?25l" + - delay: 122 + content: "\e[?25l\e[35;12H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing b \e[?25l" + - delay: 18 + content: "\e[?25l\e[1;1H\e(B\e[m\e[30m\e]8;;\e\\┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e[2;120H▲\e[3;1H│\e[3;120H█\e[4;1H│\e[4;120H█\e[5;1H│\e[5;120H█\e[6;1H│\e[6;120H█\e[7;1H│\e[7;120H█\e[8;1H│\e[8;120H█\e[9;1H│\e[9;120H█\e[10;1H│\e[10;120H█\e[11;1H│\e[11;120H█\e[12;1H│\e[12;120H█\e[13;1H│\e[13;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Bisect────────────────────────────────────────────────────────────────────────┐\e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;1H│\e[14;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[96;44m\e[1m\e]8;;\e\\b\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Mark current commit (d6348a27) as bad \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[14;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[15;1H│\e[15;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\g\e(B\e[m\e]8;;\e\\ Mark current commit (d6348a27)\e[15;56Hs good \e[15;65H \e[15;68H \e[15;81H \e[15;84H \e[15;92H \e[15;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[15;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[16;1H│\e[16;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\s\e(B\e[m\e]8;;\e\\ Skip current commit (d6348a27)\e[16;55H \e[16;64H \e[16;75H \e[16;84H \e[16;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[16;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[17;1H│\e[17;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\r\e(B\e[m\e]8;;\e\\ Reset bisect \e[17;46H \e[17;48H \e[17;55H \e[17;62H \e[17;72H \e[17;75H \e[17;79H \e[17;86H \e[17;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[17;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[18;1H│\e[18;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ Cancel \e[18;46H \e[18;48H \e[18;56H \e[18;67H \e[18;77H \e[18;85H \e[18;88H \e[18;94H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[19;1H│\e[19;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└────────────────────────────────────────────────────────────────────────1 of 5─┘\e[19;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[20;1H│\e[20;120H│\e[21;1H│\e[21;120H│\e[22;1H│\e[22;120H│\e[23;1H│\e[23;120H│\e[24;1H│\e[24;120H│\e[25;1H│\e[25;120H│\e[26;1H│\e[26;120H│\e[27;1H│\e[27;120H│\e[28;1H│\e[28;120H│\e[29;1H│\e[29;120H│\e[30;1H│\e[30;120H│\e[31;1H│\e[31;120H│\e[32;1H│\e[32;120H│\e[33;1H│\e[33;120H▼\e[34;1H└─────────────────────────────────────────────────────────────────────────────────────────────────────────────10 of 60─┘\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;12H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[14;22H\e(B\e[m\e[36m\e]8;;\e\\b\e(B\e[m\e]8;;\e\\ Mark current commit (d6348a27) as bad \e[15;22H\e(B\e[m\e[96;44m\e[1m\e]8;;\e\\g\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Mark current commit (d6348a27) as good \e[19;94H\e(B\e[m\e[32m\e[1m\e]8;;\e\\2\e[?25l" + - delay: 123 + content: "\e[?25l\e[35;12H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing \e[?25l" + - delay: 126 + content: "\e[?25l\e[1;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e[2;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[2;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[35m\e[1m\e]8;;\e\\(origin/master, \e[2;69Hrigin/feature/dem\e[2;87H, master, feature/de\e[2;108Ho)\e(B\e[m\e]8;;\e\\ Add\e[2;115Ha use\e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[3;1H│\e(B\e[m\e[34m\e]8;;\e\\ﰖ\e[3;4H41e20bf9\e[3;13H?\e[3;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[3;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e[3;52H\e(B\e[m\e]8;;\e\\Set up CI/CD p\e[3;67Hp\e[3;69Hline using GitHub actions\e[3;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[4;1H│\e(B\e[m\e[34m\e]8;;\e\\ﰖ\e[4;4He1c8e57d\e[4;13H?\e[4;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[4;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enable gzip compressi\e[4;74Hn\e[4;77Hor faster page loads\e[4;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[5;1H│\e(B\e[m\e[34m\e]8;;\e\\ﰖ\e[5;4H72e34e08\e[5;13H?\e[5;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[5;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refacto\e[5;60H error mes\e[5;71Hages\e[5;76Hfor better clarity\e[5;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[6;1H│\e(B\e[m\e[34m\e]8;;\e\\ﰖ\e[6;4Hd1993a44\e[6;13H?\e[6;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[6;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve access\e[6;67Hbility of site n\e[6;84Hv\e[6;86Hgation\e[6;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[7;1H│\e(B\e[m\e[95;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\cf82ae63\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\<-- current\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\(HEAD)\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add loading indicators to improve UX \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[8;1H│\e(B\e[m\e[34m\e]8;;\e\\ﰖ\e[8;4H099ca1d0\e[8;13H?\e[8;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[8;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e[8;52H\e(B\e[m\e]8;;\e\\Ad\e[8;55H end-to-end tests\e[8;73Hfor checkout flow\e[8;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[9;1H│\e(B\e[m\e[34m\e]8;;\e\\ﰖ\e[9;4H76ff9ddd\e[9;13H?\e[9;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[9;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e[9;52H\e(B\e[m\e]8;;\e\\Fix broke\e[9;62H links on\e[9;72Hthe help page\e[9;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[10;1H│\e(B\e[m\e[34m\e]8;;\e\\ﰖ\e[10;4H421d5c71\e[10;13H?\e[10;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[10;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ I\e[10;54Hplemen\e[10;61H au\e[10;65Homated backups\e[10;80Hfor d\e[10;86Htabase\e[10;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[11;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\d6348a27\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\<-- good\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add TypeScript types to User module \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[12;1H│\e[12;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[12;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Move co\e[12;60Hstants to a separate con\e[12;86Hg file\e[12;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[13;1H│\e[13;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance user search with fuzzy matching \e[13;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[14;1H│\e[14;21H\e(B\e[m\e]8;;\e\\ \e[14;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ref\e[14;56Hctor session\e[14;69Hmanagement\e[14;80Husing\e[14;86HJWT\e[14;101H \e[14;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[15;1H│\e[15;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure atomicity of transactions in payment system\e[15;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[16;1H│\e[16;21H\e(B\e[m\e]8;;\e\\ \e[16;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle\e[16;59Hdatabase\e[16;68Hconnection\e[16;79Hfailures\e[16;88Hgracefully\e[16;101H \e[16;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[17;1H│\e[17;21H\e(B\e[m\e]8;;\e\\ \e[17;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[17;50H◯\e[17;52H\e(B\e[m\e]8;;\e\\Update\e[17;59Hstyles\e[17;66Haccording\e[17;76Hto\e[17;79Hnew\e[17;83Hdesign\e[17;90Hguidelines\e[17;101H \e[17;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[18;1H│\e[18;21H\e(B\e[m\e]8;;\e\\ \e[18;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[18;32H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[18;50H◯\e[18;52H\e(B\e[m\e]8;;\e\\Replace\e[18;60Hdeprecated\e[18;71Hlifecycle\e[18;81Hmethods\e[18;89Hin\e[18;92HReact\e[18;98Hcomponents\e[18;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[19;1H│\e[19;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Revamp error handling in user registration \e[19;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[20;1H│\e[20;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[20;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle edge case\e[20;69Hfo\e[20;72H zero quant\e[20;84Hty in cart\e[20;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[21;1H│\e[21;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[21;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce retry mechan\e[21;75Hsm in network calls\e[21;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[22;1H│\e[22;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[22;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ R\e[22;54Hmove hardcoded values from payment module\e[22;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[23;1H│\e[23;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[23;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance lo\e[23;63Hg\e[23;66Hg in production environment\e[23;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[24;1H│\e[24;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[24;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e[24;52H\e(B\e[m\e]8;;\e\\Add i\e[24;58Hternation\e[24;68Hl\e[24;70Hzation support\e[24;85Hfo\e[24;88H German\e[24;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[25;1H│\e[25;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[25;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update UX of password res\e[25;78Ht feature\e[25;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[26;1H│\e[26;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[26;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Migrate legacy cod\e[26;71Hbase to Typescript\e[26;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[27;1H│\e[27;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[27;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Resolve race condit\e[27;72Hon in transactio\e[27;89H ha\e[27;93Hdling\e[27;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[28;1H│\e[28;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[28;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Hard\e[28;57Hn security of user password storage\e[28;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[29;1H│\e[29;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[29;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ I\e[29;54Hplement bulk d\e[29;69Hlete feature in admi\e[29;90H panel\e[29;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[30;1H│\e[30;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[30;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure CSRF protecti\e[30;73Hn\e[30;75Hfor\e[30;79Hall forms\e[30;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[31;1H│\e[31;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[31;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce Redis\e[31;68Hfor sessio\e[31;79H management\e[31;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[32;1H│\e[32;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[32;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve Dockerfile\e[32;71Hf\e[32;74H more efficient builds\e[32;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[33;1H│\e[33;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[33;45H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ I\e[33;54Hplement user blocking functionality\e[33;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────6 of 60─┘\e[?25l\e[?25l\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;21H\e(B\e[m\e[36m\e[1m\e]8;;\e\\b \e[?25l" + - delay: 16 + content: "\e[?25l\e[1;1H\e(B\e[m\e[30m\e]8;;\e\\┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e[2;120H▲\e[3;1H│\e[3;120H█\e[4;1H│\e[4;120H█\e[5;1H│\e[5;120H█\e[6;1H│\e[6;120H█\e[7;1H│\e[7;120H█\e[8;1H│\e[8;120H█\e[9;1H│\e[9;120H█\e[10;1H│\e[10;120H█\e[11;1H│\e[11;120H█\e[12;1H│\e[12;120H█\e[13;1H│\e[13;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Bisect────────────────────────────────────────────────────────────────────────┐\e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;1H│\e[14;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[96;44m\e[1m\e]8;;\e\\b\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Mark current commit (cf82ae63) as bad \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[14;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[15;1H│\e[15;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\g\e[15;24H\e(B\e[m\e]8;;\e\\Mark current commit (cf82ae63) as good \e[15;69H \e[15;72H \e[15;85H \e[15;88H \e[15;96H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[15;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[16;1H│\e[16;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\s\e[16;24H\e(B\e[m\e]8;;\e\\Skip current commit (cf82ae63) \e[16;59H \e[16;68H \e[16;79H \e[16;88H \e[16;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[16;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[17;1H│\e[17;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\r\e[17;24H\e(B\e[m\e]8;;\e\\Reset bisect \e[17;50H \e[17;52H \e[17;59H \e[17;66H \e[17;76H \e[17;79H \e[17;83H \e[17;90H \e[17;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[17;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[18;1H│\e[18;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;24H\e(B\e[m\e]8;;\e\\Cancel \e[18;32H \e[18;50H \e[18;52H \e[18;60H \e[18;71H \e[18;81H \e[18;89H \e[18;92H \e[18;98H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[19;1H│\e[19;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└────────────────────────────────────────────────────────────────────────1 of 5─┘\e[19;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[20;1H│\e[20;120H│\e[21;1H│\e[21;120H│\e[22;1H│\e[22;120H│\e[23;1H│\e[23;120H│\e[24;1H│\e[24;120H│\e[25;1H│\e[25;120H│\e[26;1H│\e[26;120H│\e[27;1H│\e[27;120H│\e[28;1H│\e[28;120H│\e[29;1H│\e[29;120H│\e[30;1H│\e[30;120H│\e[31;1H│\e[31;120H│\e[32;1H│\e[32;120H│\e[33;1H│\e[33;120H▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────6 of 60─┘\e[?25l" + - delay: 602 + content: "\e[?25l\e[35;21H\e(B\e[m\e[36m\e[1m\e]8;;\e\\\e[?25l" + - delay: 116 + content: "\e[?25l\e[1;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[2;4Ha5cc9c45\e[2;13H\e(B\e[m\e]8;;\e\\ \e[2;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[3;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[3;4H41e20bf9\e[3;13H\e(B\e[m\e]8;;\e\\ \e[3;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[4;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[4;4He1c8e57d\e[4;13H\e(B\e[m\e]8;;\e\\ \e[4;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[5;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[5;4H72e34e08\e[5;13H\e(B\e[m\e]8;;\e\\ \e[5;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[6;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[6;4Hd1993a44\e[6;13H\e(B\e[m\e]8;;\e\\ \e[6;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[7;1H│\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[31m\e]8;;\e\\cf82ae63\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[31m\e]8;;\e\\<-- bad\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add loading indicators to improve UX \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[8;1H│\e[8;120H█\e[9;1H│\e(B\e[m\e[95;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\76ff9ddd\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\<-- current\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\(HEAD)\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Fix broken links on the help page \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[10;1H│\e[10;120H█\e[11;1H│\e[11;120H█\e[12;1H│\e[12;120H█\e[13;1H│\e[13;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance user search with fuzzy matching \e[13;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[14;1H│\e[14;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor session management using JWT \e[14;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[15;1H│\e[15;21H\e(B\e[m\e]8;;\e\\ \e[15;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure atomicity\e[15;69Hof\e[15;72Htransactions\e[15;85Hin\e[15;88Hpayment\e[15;96Hsystem\e[15;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[16;1H│\e[16;21H\e(B\e[m\e]8;;\e\\ \e[16;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle\e[16;59Hdatabase\e[16;68Hconnection\e[16;79Hfailures\e[16;88Hgracefully\e[16;101H \e[16;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[17;1H│\e[17;21H\e(B\e[m\e]8;;\e\\ \e[17;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[17;50H◯\e[17;52H\e(B\e[m\e]8;;\e\\Update\e[17;59Hstyles\e[17;66Haccording\e[17;76Hto\e[17;79Hnew\e[17;83Hdesign\e[17;90Hguidelines\e[17;101H \e[17;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[18;1H│\e[18;21H\e(B\e[m\e]8;;\e\\ \e[18;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[18;32H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[18;50H◯\e[18;52H\e(B\e[m\e]8;;\e\\Replace\e[18;60Hdeprecated\e[18;71Hlifecycle\e[18;81Hmethods\e[18;89Hin\e[18;92HReact\e[18;98Hcomp\e[18;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[19;1H│\e[19;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Revamp error handling in user registration \e[19;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[20;1H│\e[20;120H│\e[21;1H│\e[21;120H│\e[22;1H│\e[22;120H│\e[23;1H│\e[23;120H│\e[24;1H│\e[24;120H│\e[25;1H│\e[25;120H│\e[26;1H│\e[26;120H│\e[27;1H│\e[27;120H│\e[28;1H│\e[28;120H│\e[29;1H│\e[29;120H│\e[30;1H│\e[30;120H│\e[31;1H│\e[31;120H│\e[32;1H│\e[32;120H│\e[33;1H│\e[33;120H▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────8 of 60─┘\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l" + - delay: 604 + content: "\e[?25l\e[35;21H\e(B\e[m\e[36m\e[1m\e]8;;\e\\b \e[?25l" + - delay: 16 + content: "\e[?25l\e[1;1H\e(B\e[m\e[30m\e]8;;\e\\┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e[2;120H▲\e[3;1H│\e[3;120H█\e[4;1H│\e[4;120H█\e[5;1H│\e[5;120H█\e[6;1H│\e[6;120H█\e[7;1H│\e[7;120H█\e[8;1H│\e[8;120H█\e[9;1H│\e[9;120H█\e[10;1H│\e[10;120H█\e[11;1H│\e[11;120H█\e[12;1H│\e[12;120H█\e[13;1H│\e[13;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Bisect────────────────────────────────────────────────────────────────────────┐\e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;1H│\e[14;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[96;44m\e[1m\e]8;;\e\\b\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Mark current commit (76ff9ddd) as bad \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[14;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[15;1H│\e[15;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\g\e[15;24H\e(B\e[m\e]8;;\e\\Mark current commit (76ff9ddd) as good \e[15;69H \e[15;72H \e[15;85H \e[15;88H \e[15;96H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[15;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[16;1H│\e[16;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\s\e[16;24H\e(B\e[m\e]8;;\e\\Skip current commit (76ff9ddd) \e[16;59H \e[16;68H \e[16;79H \e[16;88H \e[16;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[16;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[17;1H│\e[17;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\r\e[17;24H\e(B\e[m\e]8;;\e\\Reset bisect \e[17;50H \e[17;52H \e[17;59H \e[17;66H \e[17;76H \e[17;79H \e[17;83H \e[17;90H \e[17;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[17;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[18;1H│\e[18;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;24H\e(B\e[m\e]8;;\e\\Cancel \e[18;32H \e[18;50H \e[18;52H \e[18;60H \e[18;71H \e[18;81H \e[18;89H \e[18;92H \e[18;98H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[19;1H│\e[19;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└────────────────────────────────────────────────────────────────────────1 of 5─┘\e[19;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[20;1H│\e[20;120H│\e[21;1H│\e[21;120H│\e[22;1H│\e[22;120H│\e[23;1H│\e[23;120H│\e[24;1H│\e[24;120H│\e[25;1H│\e[25;120H│\e[26;1H│\e[26;120H│\e[27;1H│\e[27;120H│\e[28;1H│\e[28;120H│\e[29;1H│\e[29;120H│\e[30;1H│\e[30;120H│\e[31;1H│\e[31;120H│\e[32;1H│\e[32;120H│\e[33;1H│\e[33;120H▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────8 of 60─┘\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;12H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[14;22H\e(B\e[m\e[36m\e]8;;\e\\b\e(B\e[m\e]8;;\e\\ Mark current commit (76ff9ddd) as bad \e[15;22H\e(B\e[m\e[96;44m\e[1m\e]8;;\e\\g\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Mark current commit (76ff9ddd) as good \e[19;94H\e(B\e[m\e[32m\e[1m\e]8;;\e\\2\e[?25l" + - delay: 124 + content: "\e[?25l\e[35;12H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing \e[?25l" + - delay: 124 + content: "\e[?25l\e[1;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e[2;120H▲\e[3;1H│\e[3;120H█\e[4;1H│\e[4;120H█\e[5;1H│\e[5;120H█\e[6;1H│\e[6;120H█\e[7;1H│\e[7;120H█\e[8;1H│\e(B\e[m\e[95;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\099ca1d0\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\<-- current\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\(HEAD)\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add end-to-end tests for checkout flow \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[9;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\76ff9ddd\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\<-- good\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Fix broken links on the help page \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[10;1H│\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[10;4H421d5c71\e[10;13H\e(B\e[m\e]8;;\e\\ \e[10;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[11;1H│\e[11;120H█\e[12;1H│\e[12;120H█\e[13;1H│\e[13;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance user search with fuzzy matching \e[13;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[14;1H│\e[14;21H\e(B\e[m\e]8;;\e\\ \e[14;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ref\e[14;56Hctor session\e[14;69Hmanagement\e[14;80Husing\e[14;86HJWT\e[14;101H \e[14;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[15;1H│\e[15;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure atomicity of transactions in payment system\e[15;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[16;1H│\e[16;21H\e(B\e[m\e]8;;\e\\ \e[16;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle\e[16;59Hdatabase\e[16;68Hconnection\e[16;79Hfailures\e[16;88Hgracefully\e[16;101H \e[16;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[17;1H│\e[17;21H\e(B\e[m\e]8;;\e\\ \e[17;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[17;50H◯\e[17;52H\e(B\e[m\e]8;;\e\\Update\e[17;59Hstyles\e[17;66Haccording\e[17;76Hto\e[17;79Hnew\e[17;83Hdesign\e[17;90Hguidelines\e[17;101H \e[17;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[18;1H│\e[18;21H\e(B\e[m\e]8;;\e\\ \e[18;24H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[18;32H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[18;50H◯\e[18;52H\e(B\e[m\e]8;;\e\\Replace\e[18;60Hdeprecated\e[18;71Hlifecycle\e[18;81Hmethods\e[18;89Hin\e[18;92HReact\e[18;98Hcomp\e[18;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[19;1H│\e[19;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Revamp error handling in user registration \e[19;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[20;1H│\e[20;120H│\e[21;1H│\e[21;120H│\e[22;1H│\e[22;120H│\e[23;1H│\e[23;120H│\e[24;1H│\e[24;120H│\e[25;1H│\e[25;120H│\e[26;1H│\e[26;120H│\e[27;1H│\e[27;120H│\e[28;1H│\e[28;120H│\e[29;1H│\e[29;120H│\e[30;1H│\e[30;120H│\e[31;1H│\e[31;120H│\e[32;1H│\e[32;120H│\e[33;1H│\e[33;120H▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────7 of 60─┘\e[?25l\e[?25l\e[?25l" + - delay: 604 + content: "\e[?25l\e[35;21H\e(B\e[m\e[36m\e[1m\e]8;;\e\\b \e[?25l" + - delay: 16 + content: "\e[?25l\e[1;1H\e(B\e[m\e[30m\e]8;;\e\\┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e[2;120H▲\e[3;1H│\e[3;120H█\e[4;1H│\e[4;120H█\e[5;1H│\e[5;120H█\e[6;1H│\e[6;120H█\e[7;1H│\e[7;120H█\e[8;1H│\e[8;120H█\e[9;1H│\e[9;120H█\e[10;1H│\e[10;120H█\e[11;1H│\e[11;120H█\e[12;1H│\e[12;120H█\e[13;1H│\e[13;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Bisect────────────────────────────────────────────────────────────────────────┐\e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;1H│\e[14;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[96;44m\e[1m\e]8;;\e\\b\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Mark current commit (099ca1d0) as bad \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[14;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[15;1H│\e[15;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\g\e[15;24H\e(B\e[m\e]8;;\e\\Mark current commit (099ca1d0) as good \e[15;69H \e[15;72H \e[15;85H \e[15;88H \e[15;96H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[15;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[16;1H│\e[16;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\s\e[16;24H\e(B\e[m\e]8;;\e\\Skip current commit (099ca1d0) \e[16;59H \e[16;68H \e[16;79H \e[16;88H \e[16;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[16;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[17;1H│\e[17;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\r\e[17;24H\e(B\e[m\e]8;;\e\\Reset bisect \e[17;50H \e[17;52H \e[17;59H \e[17;66H \e[17;76H \e[17;79H \e[17;83H \e[17;90H \e[17;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[17;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[18;1H│\e[18;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;24H\e(B\e[m\e]8;;\e\\Cancel \e[18;32H \e[18;50H \e[18;52H \e[18;60H \e[18;71H \e[18;81H \e[18;89H \e[18;92H \e[18;98H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[19;1H│\e[19;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└────────────────────────────────────────────────────────────────────────1 of 5─┘\e[19;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[20;1H│\e[20;120H│\e[21;1H│\e[21;120H│\e[22;1H│\e[22;120H│\e[23;1H│\e[23;120H│\e[24;1H│\e[24;120H│\e[25;1H│\e[25;120H│\e[26;1H│\e[26;120H│\e[27;1H│\e[27;120H│\e[28;1H│\e[28;120H│\e[29;1H│\e[29;120H│\e[30;1H│\e[30;120H│\e[31;1H│\e[31;120H│\e[32;1H│\e[32;120H│\e[33;1H│\e[33;120H▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────7 of 60─┘\e[?25l" + - delay: 604 + content: "\e[?25l\e[35;21H\e(B\e[m\e[36m\e[1m\e]8;;\e\\\e[?25l" + - delay: 135 + content: "\e[?25l\e[7;2H\e(B\e[m\e[30m\e]8;;\e\\ﰖ\e[7;4Hcf82ae63\e[7;13H\e(B\e[m\e]8;;\e\\ \e[13;21H \e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance user search with fuzzy matching \e[14;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Bisect complete───────────────────────────────────────────────────────────────┐\e[15;22H\e(B\e[m\e[1m\e]8;;\e\\Bisect complete! The following commit introduced the change:\e[16;22H\e(B\e[m\e]8;;\e\\ \e[16;24H \e[16;29H \e[16;37H \e[16;44H \e[17;22H\e(B\e[m\e[1m\e]8;;\e\\099ca1d Add end-to-end tests for checkout flow\e[18;24H\e(B\e[m\e]8;;\e\\ \e[19;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\Do you want to reset 'git bisect' now? \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[20;21H└───────────────────────────────────────────────────────────────────────────────┘\e[?25l" + - delay: 2604 + content: "\e[?25l\e[?25l" + - delay: 95 + content: "\e[?25l\e[1;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[2;4Ha5cc9c45\e[2;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[2;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[2;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[35m\e[1m\e]8;;\e\\(HEAD -> featu\e[2;55He/demo, origin/master, origin/feature/demo, mast\e[2;104Hr)\e(B\e[m\e]8;;\e\\ Add\e[2;111Ha user-fr\e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[3;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[3;4H41e20bf9\e[3;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[3;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[3;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Set up CI/CD pipeline using GitHub actions \e[3;87H \e[3;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[4;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[4;4He1c8e57d\e[4;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[4;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[4;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enable gzip\e[4;52Hcompr\e[4;58Hssion\e[4;64Hf\e[4;66Hr fa\e[4;71Hter page\e[4;80Hloads \e[4;87H \e[4;92H \e[4;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[5;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[5;4H72e34e08\e[5;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[5;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[5;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor error messag\e[5;62Hs for better cla\e[5;79Hity \e[5;87H \e[5;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[6;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[6;4Hd1993a44\e[6;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[6;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[6;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve accessibility of \e[6;67Hte navigation \e[6;82H \e[6;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[7;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[7;4Hcf82ae63\e[7;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[7;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[7;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add loading\e[7;52Hin\e[7;55Hicators to improve UX \e[7;78H \e[7;86H \e[7;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[8;1H│\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e[8;4H099ca1d0\e[8;13H\e(B\e[m\e[94;44m\e[1m\e]8;;\e\\9:55PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e[8;37H\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add end-to-end tests for checkout\e[8;74Hflow \e[8;80H \e[8;84H \e[8;93H \e[8;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[9;1H│\e[9;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[9;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Fix broken links on the help\e[9;69Hpage \e[9;76H \e[9;81H \e[9;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[10;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[10;4H421d5c71\e[10;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[10;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[10;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement\e[10;50Hautomated backups for\e[10;72Hd\e[10;74Htaba\e[10;79He \e[10;84H \e[10;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[11;1H│\e[11;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[11;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add TypeScript types to User module\e[11;76H \e[11;81H \e[11;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[12;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[12;4H23dc2660\e[12;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[12;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[12;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Move constants to a \e[12;61Heparate config fil\e[12;81H \e[12;88H \e[12;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[13;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[13;4Hc0988fbd\e[13;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[13;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[13;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance user se\e[13;56Hr\e[13;58Hh\e[13;60Hwith\e[13;65Hfuzzy matc\e[13;76Hing \e[13;83H \e[13;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[14;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[14;4Habdbae31\e[14;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[14;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor session management using JWT \e[14;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[15;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[15;4Hc6224692\e[15;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[15;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure atomicity of transactions in payment\e[15;84Hsystem\e[15;101H \e[15;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[16;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[16;4Ha2bbeadf\e[16;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[16;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[16;38H◯\e[16;40H\e(B\e[m\e]8;;\e\\Handle\e[16;47Hdatabase\e[16;56Hconnection\e[16;67Hfailures\e[16;76Hgracefully\e[16;101H \e[16;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[17;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[17;4He7503830\e[17;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[17;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update styles according to new\e[17;71Hdesign\e[17;78Hguidelines\e[17;101H \e[17;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[18;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[18;4H2d3dba16\e[18;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[18;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[18;38H◯\e[18;40H\e(B\e[m\e]8;;\e\\Replace\e[18;48Hdeprecated\e[18;59Hlifecycle\e[18;69Hmethods\e[18;77Hin\e[18;80HReact\e[18;86Hcomponents\e[18;101H \e[18;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[19;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[19;4H635edf39\e[19;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[19;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Revamp error handling in user registration \e[19;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[20;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[20;4H25c5d1fe\e[20;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[20;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle edge case for zero quantity in cart \e[20;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[21;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[21;4Hfcf47a26\e[21;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[21;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[21;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce\e[21;50Hretry mechanism in network calls \e[21;89H \e[21;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[22;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[22;4Haf171bab\e[22;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[22;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[22;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Remove hardcoded values from\e[22;69Hp\e[22;71Hym\e[22;74Hnt m\e[22;79Hdule \e[22;89H \e[22;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[23;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[23;4Hd40aed30\e[23;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[23;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[23;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance loggi\e[23;54Hg in pr\e[23;62Hduction environment\e[23;82H \e[23;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[24;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[24;4H9f6bf535\e[24;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[24;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[24;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add internationalization support f\e[24;75Hr\e[24;77HGerman \e[24;85H \e[24;89H \e[24;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[25;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[25;4Hb99c073b\e[25;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[25;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[25;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update UX\e[25;50Hof \e[25;54Hassword\e[25;62Hreset feature \e[25;80H \e[25;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[26;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[26;4H5a71317e\e[26;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[26;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[26;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Migrate legacy cod\e[26;59Hbase to\e[26;67HTyp\e[26;71Hscrip\e[26;77H \e[26;79H \e[26;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[27;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[27;4H163d7f2a\e[27;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[27;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[27;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Resolve race condition in transactio\e[27;78Hhandling \e[27;90H \e[27;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[28;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[28;4H4075d17b\e[28;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[28;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[28;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Harden security of\e[28;59Huser password stor\e[28;78Hge \e[28;85H \e[28;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[29;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[29;4H975c391b\e[29;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[29;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[29;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement\e[29;50Hbulk d\e[29;57Hl\e[29;59Hte\e[29;62Hfeatur\e[29;69H in admin panel\e[29;85H \e[29;91H \e[29;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[30;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[30;4Hf94a9251\e[30;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[30;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[30;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure CSRF\e[30;52Hprotection fo\e[30;66H all f\e[30;73Hrms \e[30;79H \e[30;83H \e[30;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[31;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[31;4Hbc63a4f0\e[31;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[31;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[31;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce\e[31;50HRedis for session\e[31;68Hmanag\e[31;74Hment \e[31;80H \e[31;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[32;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[32;4Hf038a61c\e[32;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[32;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[32;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve Dockerfile for mo\e[32;66He efficient builds \e[32;90H \e[32;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[33;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[33;4H4d8a221a\e[33;13H\e(B\e[m\e[34m\e]8;;\e\\9:55PM\e[33;20H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[33;37H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement\e[33;50Huser blocking functionality \e[33;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────7 of 60─┘\e[35;103H\e(B\e[m\e[36m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\Inspect problematic commit \e[?25l" + - delay: 502 + content: "\e[?25l\e[35;28H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing _ \e[?25l" + - delay: 9 + content: "\e[?25l\e[1;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┐\e(B\e[m\e[30m\e]8;;\e\\┌─Patch────────────────────────────────────────────────────┐\e[2;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[33m\e]8;;\e\\commit 099ca1d062203605c4fd983338c7fe8a15850489\e(B\e[m\e]8;;\e\\ \e[2;111H \e[2;113H \e(B\e[m\e[30m\e]8;;\e\\▲\e[3;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\Author: CI \e[3;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[4;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\Date:\e[4;68H Wed Aug 2\e[4;80H21:55:40\e[4;89H2023\e[4;94H+1000\e[4;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[5;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[5;64H \e[5;68H \e[5;75H \e[5;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[6;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[6;65H Add\e[6;70Hend-to-end\e[6;81Htests\e[6;87Hfor\e[6;91Hcheckout\e[6;100Hflow\e[6;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[7;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\---\e[7;66H \e[7;74H \e[7;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[8;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ tests/checkout_test.sql | 1 \e(B\e[m\e[32m\e]8;;\e\\+\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\█\e[9;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ 1 file changed,\e[9;79H1\e[9;81Hinsertion(+)\e[9;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[10;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[10;68H \e[10;72H \e[10;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[11;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\diff --git a/tests/checkout_test.sql \e(B\e[m\e[30m\e]8;;\e\\█\e[12;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\b/tests/checkout_test.sql\e[12;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[13;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\new file mode 100644\e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\index 0000000..21b2b98\e[14;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[15;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\--- /dev/null\e[15;76H\e(B\e[m\e]8;;\e\\ \e[15;84H \e[15;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[16;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\+++ b/tests/checkout_test.sql\e[16;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[17;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\@@ -0,0 +1 @@\e(B\e[m\e]8;;\e\\ \e[17;78H \e[17;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[18;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[32m\e]8;;\e\\+DELETE ALL TABLES;\e(B\e[m\e]8;;\e\\ \e[18;86H \e[18;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[19;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\\\ No newline at end of\e[19;85Hfile\e[19;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[20;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[20;66H \e[20;75H \e[20;78H \e[20;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[21;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[21;66H \e[21;69H \e[21;77H \e[21;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[22;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[22;64H \e[22;69H \e[22;77H \e[22;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[23;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[23;70H \e[23;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[24;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[24;65H \e[24;73H \e[24;77H \e[24;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[25;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[25;68H \e[25;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[26;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[26;64H \e[26;67H \e[26;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[27;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e[27;63H\e(B\e[m\e]8;;\e\\ \e[27;66H \e[27;78H \e[27;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[28;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[28;64H \e[28;73H \e[28;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[29;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e[29;70H \e[29;73H \e[29;79H \e[29;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[30;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e[30;63H\e(B\e[m\e]8;;\e\\ \e[30;67H \e[30;71H \e[30;120H\e(B\e[m\e[30m\e]8;;\e\\▼\e[31;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\└──────────────────────────────────────────────────────────┘\e[32;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\┌─Command log──────────────────────────────────────────────┐\e[33;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\▼\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\Your branch \e[33;75Hs up\e[33;80Hto\e[33;83Hdate\e[33;88Hwith\e[33;93H'origin/feature/demo'.\e[33;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[34;52H\e(B\e[m\e[32m\e[1m\e]8;;\e\\7 of 60\e[34;60H┘\e(B\e[m\e[30m\e]8;;\e\\└──────────────────────────────────────────────────────────┘\e[?25l\e[?25l\e[?25l" + - delay: 1103 + content: "\e[?25l\e[35;37H\e(B\e[m\e[36m\e[1m\e]8;;\e\\\e[?25l" + - delay: 19 + content: "\e[?25l\e[1;3H\e(B\e[m\e[32m\e[1m\e]8;;\e\\Diff files (099ca1d Add end-to-end tests for checkout fl\e[2;2H\e(B\e[m\e[44m\e[1m\e]8;;\e\\▼  tests \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[3;2H\e(B\e[m\e]8;;\e\\ \e[3;4H\e(B\e[m\e[32m\e]8;;\e\\A\e(B\e[m\e]8;;\e\\  checkout_test.sql \e[3;38H \e[3;40H \e[3;44H \e[3;47H \e[3;53H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[4;2H\e(B\e[m\e]8;;\e\\ \e[4;4H \e[4;13H \e[4;20H \e[4;38H \e[4;40H \e[4;47H \e[4;52H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[5;2H\e(B\e[m\e]8;;\e\\ \e[5;4H \e[5;13H \e[5;20H \e[5;38H \e[5;40H \e[5;49H \e[5;55H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[6;2H\e(B\e[m\e]8;;\e\\ \e[6;4H \e[6;13H \e[6;20H \e[6;38H \e[6;40H \e[6;48H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[7;2H\e(B\e[m\e]8;;\e\\ \e[7;4H \e[7;13H \e[7;20H \e[7;38H \e[7;40H \e[7;44H \e[7;52H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[8;2H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[9;2H\e(B\e[m\e]8;;\e\\ \e[9;4H \e[9;13H \e[9;20H \e[9;38H \e[9;40H \e[9;44H \e[9;51H \e[9;57H \e[9;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[10;2H\e(B\e[m\e]8;;\e\\ \e[10;4H \e[10;13H \e[10;20H \e[10;38H \e[10;40H \e[10;50H \e[10;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[11;2H\e(B\e[m\e]8;;\e\\ \e[11;4H \e[11;13H \e[11;20H \e[11;38H \e[11;40H \e[11;44H \e[11;55H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[12;2H\e(B\e[m\e]8;;\e\\ \e[12;4H \e[12;13H \e[12;20H \e[12;38H \e[12;40H \e[12;45H \e[12;55H \e[12;58H \e[12;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[13;2H\e(B\e[m\e]8;;\e\\ \e[13;4H \e[13;13H \e[13;20H \e[13;38H \e[13;40H \e[13;48H \e[13;53H \e[13;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[14;2H\e(B\e[m\e]8;;\e\\ \e[14;4H \e[14;13H \e[14;20H \e[14;38H \e[14;40H \e[14;49H \e[14;57H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[15;2H\e(B\e[m\e]8;;\e\\ \e[15;4H \e[15;13H \e[15;20H \e[15;38H \e[15;40H \e[15;47H \e[15;57H \e[15;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[16;2H\e(B\e[m\e]8;;\e\\ \e[16;4H \e[16;13H \e[16;20H \e[16;38H \e[16;40H \e[16;47H \e[16;56H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[17;2H\e(B\e[m\e]8;;\e\\ \e[17;4H \e[17;13H \e[17;20H \e[17;38H \e[17;40H \e[17;47H \e[17;54H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;2H\e(B\e[m\e]8;;\e\\ \e[18;4H \e[18;13H \e[18;20H \e[18;38H \e[18;40H \e[18;48H \e[18;59H \e[19;2H \e[19;4H \e[19;13H \e[19;20H \e[19;38H \e[19;40H \e[19;47H \e[19;53H \e[20;2H \e[20;4H \e[20;13H \e[20;20H \e[20;38H \e[20;40H \e[20;47H \e[20;52H \e[20;57H \e[21;2H \e[21;4H \e[21;13H \e[21;20H \e[21;38H \e[21;40H \e[21;50H \e[21;56H \e[22;2H \e[22;4H \e[22;13H \e[22;20H \e[22;38H \e[22;40H \e[22;47H \e[22;57H \e[23;2H \e[23;4H \e[23;13H \e[23;20H \e[23;38H \e[23;40H \e[23;48H \e[23;56H \e[23;59H \e[24;2H \e[24;4H \e[24;13H \e[24;20H \e[24;38H \e[24;40H \e[24;44H \e[25;2H \e[25;4H \e[25;13H \e[25;20H \e[25;38H \e[25;40H \e[25;47H \e[25;50H \e[25;53H \e[26;2H \e[26;4H \e[26;13H \e[26;20H \e[26;38H \e[26;40H \e[26;48H \e[26;55H \e[27;2H \e[27;4H \e[27;13H \e[27;20H \e[27;38H \e[27;40H \e[27;48H \e[27;53H \e[28;2H \e[28;4H \e[28;13H \e[28;20H \e[28;38H \e[28;40H \e[28;47H \e[28;56H \e[28;59H \e[29;2H \e[29;4H \e[29;13H \e[29;20H \e[29;38H \e[29;40H \e[29;50H \e[29;55H \e[30;2H \e[30;4H \e[30;13H \e[30;20H \e[30;38H \e[30;40H \e[30;47H \e[30;52H \e[31;2H \e[31;4H \e[31;13H \e[31;20H \e[31;38H \e[31;40H \e[31;50H \e[31;56H \e[32;2H \e[32;4H \e[32;13H \e[32;20H \e[32;38H \e[32;40H \e[32;48H \e[32;59H \e[33;2H \e[33;4H \e[33;13H \e[33;20H \e[33;38H \e[33;40H \e[33;50H \e[33;55H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[34;52H─1 of 2\e[?25l" + - delay: 8 + content: "\e[?25l\e[2;62H\e(B\e[m\e[1m\e]8;;\e\\diff --git a/tests/checkout_test.sql \e[3;62Hb/tests/checkout_test.sql\e(B\e[m\e]8;;\e\\ \e[4;62H\e(B\e[m\e[1m\e]8;;\e\\new file mode 100644\e(B\e[m\e]8;;\e\\ \e[4;89H \e[4;94H \e[5;62H\e(B\e[m\e[1m\e]8;;\e\\index 0000000..21b2b98\e[6;62H--- /dev/null\e(B\e[m\e]8;;\e\\ \e[6;81H \e[6;87H \e[6;91H \e[6;100H \e[7;62H\e(B\e[m\e[1m\e]8;;\e\\+++ b/tests/checkout_test.sql\e[8;62H\e(B\e[m\e[36m\e]8;;\e\\@@ -0,0 +1 @@\e(B\e[m\e]8;;\e\\ \e[8;87H \e[8;89H \e[8;91H \e[9;62H\e(B\e[m\e[32m\e]8;;\e\\+DELETE ALL TABLES;\e(B\e[m\e]8;;\e\\ \e[10;62H\\\e[10;64HNo\e[10;67Hnewline\e[10;75Hat\e[10;78Hend\e[10;82Hof\e[10;85Hfile\e[11;62H \e[12;62H \e[13;62H \e[14;62H \e[15;62H \e[16;62H \e[17;62H \e[18;62H \e[19;62H \e[19;64H \e[19;67H \e[19;75H \e[19;78H \e[19;82H \e[19;85H \e[19;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[20;120H█\e[21;120H█\e[22;120H█\e[?25l" + - delay: 602 + content: "\e[?25l\e[35;28H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[35;9H \e[35;21H \e[?25l" + - delay: 2000 + content: "\e[?12l\e[?25h\e[39;49m\e(B\e[m\e[H\e[2J\e[?1049l\e[23;0;0t\e[?1l\e>\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?2004l\e[?1004l" diff --git a/demo/cherry_pick-compressed.gif b/demo/cherry_pick-compressed.gif new file mode 100644 index 000000000..7c9ced7fe Binary files /dev/null and b/demo/cherry_pick-compressed.gif differ diff --git a/demo/cherry_pick.gif b/demo/cherry_pick.gif new file mode 100644 index 000000000..b178dae7f Binary files /dev/null and b/demo/cherry_pick.gif differ diff --git a/demo/cherry_pick.yml b/demo/cherry_pick.yml new file mode 100644 index 000000000..a5c00beb4 --- /dev/null +++ b/demo/cherry_pick.yml @@ -0,0 +1,188 @@ +# The configurations that used for the recording, feel free to edit them +config: + + # Specify a command to be executed + # like `/bin/bash -l`, `ls`, or any other commands + # the default is bash for Linux + # or powershell.exe for Windows + command: go run cmd/integration_test/main.go cli --slow pkg/integration/tests/demo/cherry_pick.go + + # Specify the current working directory path + # the default is the current working directory path + cwd: /Users/jesseduffieldduffield/repos/lazygit + + # Export additional ENV variables + env: + recording: true + + # Explicitly set the number of columns + # or use `auto` to take the current + # number of columns of your shell + cols: 120 # 100 + + # Explicitly set the number of rows + # or use `auto` to take the current + # number of rows of your shell + rows: 35 # 30 + + # Amount of times to repeat GIF + # If value is -1, play once + # If value is 0, loop indefinitely + # If value is a positive number, loop n times + repeat: 0 + + # Quality + # 1 - 100 + # Higher quality seems to make no difference, but running it through + # gifsicle ends up with a much better compressed version. + quality: 100 + + # Delay between frames in ms + # If the value is `auto` use the actual recording delays + frameDelay: auto + + # Maximum delay between frames in ms + # Ignored if the `frameDelay` isn't set to `auto` + # Set to `auto` to prevent limiting the max idle time + maxIdleTime: 2000 + + # The surrounding frame box + # The `type` can be null, window, floating, or solid` + # To hide the title use the value null + # Don't forget to add a backgroundColor style with a null as type + frameBox: + type: floating + title: Lazygit + style: + border: 0px black solid + backgroundColor: "#1d1d1d" + margin: -5px + + # Add a watermark image to the rendered gif + # You need to specify an absolute path for + # the image on your machine or a URL, and you can also + # add your own CSS styles + watermark: + imagePath: null + style: + position: absolute + right: 15px + bottom: 15px + width: 100px + opacity: 0.9 + + # Cursor style can be one of + # `block`, `underline`, or `bar` + cursorStyle: block + + # Font family + # You can use any font that is installed on your machine + # in CSS-like syntax + fontFamily: "DejaVuSansMono Nerd Font" + + # The size of the font + fontSize: 8 + + # The height of lines + lineHeight: 1 + + # The spacing between letters + letterSpacing: 0 + + # Theme + theme: + background: "transparent" + foreground: "#dddad6" + cursor: "#c7c7c7" + black: "#7a7a7a" + red: "#fc4384" + green: "#b3e33b" + yellow: "#ffa727" + blue: "#102895" + magenta: "#c930c7" + cyan: "#00c5c7" + white: "#c7c7c7" + brightBlack: "#676767" + brightRed: "#ff7fac" + brightGreen: "#c8ed71" + brightYellow: "#ebdf86" + brightBlue: "#6871ff" + brightMagenta: "#ff76ff" + brightCyan: "#5ffdff" + brightWhite: "#fffefe" + +# Records, feel free to edit them +records: + - delay: 5327 + content: "\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?2004l\e[?1049h\e[22;0;0t\e[?1h\e=\e[?25l\e[H\e[2J\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?1000h\e[?1002h\e[?1003h\e[?1006h\e[?1004h" + - delay: 82 + content: "\e[?25l\e[1;1H\e(B\e[m\e[30m\e]8;;\e\\┌─Status───────────────────────────────┐┌─Diff─────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e(B\e[m\e]8;;\e\\ repo → \e(B\e[m\e[31m\e]8;;\e\\hotfix/fix-bug\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\No changed files \e(B\e[m\e[30m\e]8;;\e\\│\e[3;1H└──────────────────────────────────────┘│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[4;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Files \e(B\e[m\e]8;;\e\\- Worktrees - Submodules\e(B\e[m\e[32m\e[1m\e]8;;\e\\───────┐\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[5;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[6;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[7;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[8;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[9;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[10;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[11;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[12;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[13;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└──────────────────────────────────────┘\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[14;1H┌─\e(B\e[m\e[32m\e]8;;\e\\Local branches \e(B\e[m\e[30m\e]8;;\e\\- Remotes - Tags──────┐│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[15;1H│\e(B\e[m\e[32m\e]8;;\e\\ *\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[31m\e]8;;\e\\שׂ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[31m\e]8;;\e\\hotfix/fix-bug\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[16;1H│\e(B\e[m\e[36m\e]8;;\e\\0s\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\שׂ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\feature/user-module\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[17;1H│\e(B\e[m\e[36m\e]8;;\e\\0s\e(B\e[m\e]8;;\e\\ שׂ master \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[18;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[19;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[20;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[21;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[22;1H└───────────────────────────────1 of 3─┘│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[23;1H┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────┐│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[24;1H│\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[33m\e]8;;\e\\ec1c9e19\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Remove unused code and l\e(B\e[m\e[30m\e]8;;\e\\▲│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[25;1H│\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[33m\e]8;;\e\\b001b8e4\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Integrate support for ma\e(B\e[m\e[30m\e]8;;\e\\█│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[26;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\5cf47fea\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Fix bug in timezone conv\e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[27;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\e12bf291\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Move constants to a sepa\e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[28;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\b2509f99\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Enhance user search with\e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[29;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\07225f69\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Refactor session managem\e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[30;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\a4c7fe26\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Ensure atomicity of tran\e(B\e[m\e[30m\e]8;;\e\\▼│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[31;1H└──────────────────────────────1 of 53─┘└──────────────────────────────────────────────────────────────────────────────┘\e[32;1H┌─Stash────────────────────────────────┐┌─Command log──────────────────────────────────────────────────────────────────┐\e[33;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\│\e[34;1H└───────────────────────────────0 of 0─┘└──────────────────────────────────────────────────────────────────────────────┘\e[35;1H\e(B\e[m\e[34m\e]8;;\e\\/: Scroll, : Cancel, q: Quit, ?: Keybindings, 1-5: Jump to panel, H/L: Scroll left/right \e[?25l\e[?25l\e[13;33H\e(B\e[m\e[32m\e[1m\e]8;;\e\\0 of 0\e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\Cherry\e[35;8Hpick\e[35;13Hcommits\e[35;21Hfrom\e[35;26Hanother\e[35;34Hbranch\e[?25l" + - delay: 1002 + content: "\e[?25l\e[35;41H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing 3 \e[?25l\e[?25l\e[1;43H\e(B\e[m\e[30m\e]8;;\e\\Log─\e[4;1H┌─\e(B\e[m\e[32m\e]8;;\e\\Files \e(B\e[m\e[30m\e]8;;\e\\- Worktrees - Submodules───────┐\e[5;1H│\e[5;40H│\e[6;1H│\e[6;40H│\e[7;1H│\e[7;40H│\e[8;1H│\e[8;40H│\e[9;1H│\e[9;40H│\e[10;1H│\e[10;40H│\e[11;1H│\e[11;40H│\e[12;1H│\e[12;40H│\e[13;1H└───────────────────────────────0 of 0─┘\e[14;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Local branches \e(B\e[m\e]8;;\e\\- Remotes - Tags\e(B\e[m\e[32m\e[1m\e]8;;\e\\──────┐\e[15;1H│\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ *\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[91;44m\e[1m\e]8;;\e\\שׂ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[91;44m\e[1m\e]8;;\e\\hotfix/fix-bug\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[16;1H│\e[16;40H│\e[17;1H│\e[17;40H│\e[18;1H│\e[18;40H│\e[19;1H│\e[19;40H│\e[20;1H│\e[20;40H│\e[21;1H│\e[21;40H│\e[22;1H└───────────────────────────────1 of 3─┘\e[?25l" + - delay: 16 + content: "\e[?25l\e[2;42H\e(B\e[m\e]8;;\e\\* \e(B\e[m\e[33m\e]8;;\e\\commit ec1c9e1 (\e(B\e[m\e[36m\e[1m\e]8;;\e\\HEAD -> \e(B\e[m\e[32m\e[1m\e]8;;\e\\hotfix/fix-bug\e(B\e[m\e[33m\e]8;;\e\\)\e[2;120H\e(B\e[m\e[30m\e]8;;\e\\▲\e[3;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[3;44H\e(B\e[m\e]8;;\e\\Author:\e[3;52HCI\e[3;55H\e[3;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[4;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[4;44H\e(B\e[m\e]8;;\e\\Date:\e[4;52H1\e[4;54Hsecond\e[4;61Hago\e[4;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[5;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[5;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[6;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[6;48H\e(B\e[m\e]8;;\e\\Remove\e[6;55Hunused\e[6;62Hcode\e[6;67Hand\e[6;71Hlibraries\e[7;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[8;42H\e(B\e[m\e]8;;\e\\*\e[8;44H\e(B\e[m\e[33m\e]8;;\e\\commit b001b8e\e[9;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[9;44H\e(B\e[m\e]8;;\e\\Author:\e[9;52HCI\e[9;55H\e[10;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[10;44H\e(B\e[m\e]8;;\e\\Date:\e[10;52H1\e[10;54Hsecond\e[10;61Hago\e[11;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[12;42H|\e[12;48H\e(B\e[m\e]8;;\e\\Integrate\e[12;58Hsupport\e[12;66Hfor\e[12;70Hmarkdown\e[12;79Hin\e[12;82Huser\e[12;87Hposts\e[13;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[14;42H\e(B\e[m\e]8;;\e\\*\e[14;44H\e(B\e[m\e[33m\e]8;;\e\\commit 5cf47fe (\e(B\e[m\e[32m\e[1m\e]8;;\e\\master\e(B\e[m\e[33m\e]8;;\e\\)\e[15;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[15;44H\e(B\e[m\e]8;;\e\\Author:\e[15;52HCI\e[15;55H\e[16;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[16;44H\e(B\e[m\e]8;;\e\\Date:\e[16;52H1\e[16;54Hsecond\e[16;61Hago\e[17;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[18;42H|\e[18;48H\e(B\e[m\e]8;;\e\\Fix\e[18;52Hbug\e[18;56Hin\e[18;59Htimezone\e[18;68Hconversion.\e[19;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[20;42H\e(B\e[m\e]8;;\e\\*\e[20;44H\e(B\e[m\e[33m\e]8;;\e\\commit e12bf29\e[21;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[21;44H\e(B\e[m\e]8;;\e\\Author:\e[21;52HCI\e[21;55H\e[22;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[22;44H\e(B\e[m\e]8;;\e\\Date:\e[22;52H1\e[22;54Hsecond\e[22;61Hago\e[23;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[24;42H|\e[24;48H\e(B\e[m\e]8;;\e\\Move\e[24;53Hconstants\e[24;63Hto\e[24;66Ha\e[24;68Hseparate\e[24;77Hconfig\e[24;84Hfile\e[25;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[26;42H\e(B\e[m\e]8;;\e\\*\e[26;44H\e(B\e[m\e[33m\e]8;;\e\\commit b2509f9\e[27;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[27;44H\e(B\e[m\e]8;;\e\\Author:\e[27;52HCI\e[27;55H\e[28;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[28;44H\e(B\e[m\e]8;;\e\\Date:\e[28;52H2\e[28;54Hseconds\e[28;62Hago\e[29;42H\e(B\e[m\e[31m\e]8;;\e\\|\e[30;42H|\e[30;48H\e(B\e[m\e]8;;\e\\Enhance\e[30;56Huser\e[30;61Hsearch\e[30;68Hwith\e[30;73Hfuzzy\e[30;79Hmatching\e[30;120H\e(B\e[m\e[30m\e]8;;\e\\▼\e[?25l\e[?25l\e[4;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[5;120H│\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;41H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[15;2H\e(B\e[m\e[32m\e]8;;\e\\ *\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[31m\e]8;;\e\\שׂ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[31m\e]8;;\e\\hotfix/fix-bug\e(B\e[m\e]8;;\e\\ \e[16;2H\e(B\e[m\e[96;44m\e[1m\e]8;;\e\\0s\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\שׂ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\feature/user-module\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e[22;33H\e(B\e[m\e[32m\e[1m\e]8;;\e\\2\e[?25l" + - delay: 13 + content: "\e[?25l\e[2;51H\e(B\e[m\e[33m\e]8;;\e\\48a8789\e[2;60H\e(B\e[m\e[32m\e[1m\e]8;;\e\\feature/user-module\e(B\e[m\e[33m\e]8;;\e\\)\e(B\e[m\e]8;;\e\\ \e[4;52H2\e[4;60Hs ago\e[6;48HAdd W\e[6;54Hbpack for asset bundling \e[8;51H\e(B\e[m\e[33m\e]8;;\e\\d67e7e3\e[10;52H\e(B\e[m\e]8;;\e\\2\e[10;60Hs ago\e[12;48HHandle s\e[12;57Hs\e[12;59Hion time\e[12;68Hut g\e[12;73Hacefully\e[12;82H \e[12;87H \e[16;52H2\e[16;60Hs ago\e[22;52H2\e[22;60Hs ago\e[28;52H3\e[?25l\e[?25l\e[?25l" + - delay: 423 + content: "\e[?25l\e[35;41H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing \e[?25l" + - delay: 22 + content: "\e[?25l\e[1;43H\e(B\e[m\e[30m\e]8;;\e\\C\e[1;45Hmmit\e[14;3H\e(B\e[m\e[32m\e[1m\e]8;;\e\\C\e[14;5Hmmits (feature/user-module)──\e[15;2H\e(B\e[m\e[93;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[93;44m\e[1m\e]8;;\e\\48a87893\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add Webpack for asset bu\e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[16;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[33m\e]8;;\e\\d67e7e35\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Handle session timeout g\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[17;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\5cf47fea\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[17;16H\e(B\e[m\e]8;;\e\\Fix\e[17;20Hbug\e[17;24Hin\e[17;27Htimezone\e[17;36Hconv\e[18;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[18;4He12bf291\e[18;13H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[18;16H\e(B\e[m\e]8;;\e\\Move\e[18;21Hconstants\e[18;31Hto\e[18;34Ha\e[18;36Hsepa\e[19;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[19;4Hb2509f99\e[19;13H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[19;16H\e(B\e[m\e]8;;\e\\Enhance\e[19;24Huser\e[19;29Hsearch\e[19;36Hwith\e[20;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[20;4H07225f69\e[20;13H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[20;16H\e(B\e[m\e]8;;\e\\Refactor\e[20;25Hsession\e[20;33Hmanagem\e[21;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[21;4Ha4c7fe26\e[21;13H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[21;16H\e(B\e[m\e]8;;\e\\Ensure\e[21;23Hatomicity\e[21;33Hof\e[21;36Htran\e(B\e[m\e[32m\e[1m\e]8;;\e\\▼\e[22;32H1 of 5\e[?25l" + - delay: 11 + content: "\e[?25l\e[2;42H\e(B\e[m\e[33m\e]8;;\e\\commit 48a\e[2;53H7\e[2;55H93fe3684d7f21e4bd7bdfc083860d1796d (\e(B\e[m\e[32m\e[1m\e]8;;\e\\feature/user-module\e(B\e[m\e[33m\e]8;;\e\\)\e[3;42H\e(B\e[m\e]8;;\e\\Author: CI \e[4;42HDate: \e[4;50HWed\e[4;54HAug 2 22:20:11\e[4;69H2023\e[4;74H+1000\e[4;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[5;42H\e(B\e[m\e]8;;\e\\ \e[5;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[6;42H\e(B\e[m\e]8;;\e\\ \e[6;46HAdd Webpack for asset bundling \e[6;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[7;42H\e(B\e[m\e]8;;\e\\ \e[7;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[8;42H\e(B\e[m\e]8;;\e\\ \e[8;44H \e[8;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[9;42H\e(B\e[m\e]8;;\e\\ \e[9;44H \e[9;52H \e[9;55H \e[9;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[10;42H\e(B\e[m\e]8;;\e\\ \e[10;44H \e[10;52H \e[10;54H \e[10;62H \e[10;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[11;42H\e(B\e[m\e]8;;\e\\ \e[11;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[12;42H\e(B\e[m\e]8;;\e\\ \e[12;48H \e[12;55H \e[12;63H \e[12;71H \e[12;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[13;42H\e(B\e[m\e]8;;\e\\ \e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;42H\e(B\e[m\e]8;;\e\\ \e[14;44H \e[14;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[15;42H\e(B\e[m\e]8;;\e\\ \e[15;44H \e[15;52H \e[15;55H \e[15;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[16;42H\e(B\e[m\e]8;;\e\\ \e[16;44H \e[16;52H \e[16;54H \e[16;62H \e[16;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[17;42H\e(B\e[m\e]8;;\e\\ \e[17;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[18;42H\e(B\e[m\e]8;;\e\\ \e[18;48H \e[18;52H \e[18;56H \e[18;59H \e[18;68H \e[18;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[19;42H\e(B\e[m\e]8;;\e\\ \e[19;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[20;42H\e(B\e[m\e]8;;\e\\ \e[20;44H \e[20;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[21;42H\e(B\e[m\e]8;;\e\\ \e[21;44H \e[21;52H \e[21;55H \e[21;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[22;42H\e(B\e[m\e]8;;\e\\ \e[22;44H \e[22;52H \e[22;54H \e[22;62H \e[22;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[23;42H\e(B\e[m\e]8;;\e\\ \e[23;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[24;42H\e(B\e[m\e]8;;\e\\ \e[24;48H \e[24;53H \e[24;63H \e[24;66H \e[24;68H \e[24;77H \e[24;84H \e[24;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[25;42H\e(B\e[m\e]8;;\e\\ \e[25;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[26;42H\e(B\e[m\e]8;;\e\\ \e[26;44H \e[27;42H \e[27;44H \e[27;52H \e[27;55H \e[28;42H \e[28;44H \e[28;52H \e[28;54H \e[28;62H \e[29;42H \e[30;42H \e[30;48H \e[30;56H \e[30;61H \e[30;68H \e[30;73H \e[30;79H \e[?25l" + - delay: 604 + content: "\e[?25l\e[35;50H\e(B\e[m\e[36m\e[1m\e]8;;\e\\c \e[?25l" + - delay: 8 + content: "\e[?25l\e[15;2H\e(B\e[m\e[94;46m\e[1m\e]8;;\e\\ﰖ\e[15;4H48a87893\e[35;97H\e(B\e[m\e[36m\e]8;;\e\\1 commit copied \e(B\e[m\e[36m\e[4m\e]8;;\e\\(Reset) \e[?25l" + - delay: 11 + content: "\e[?25l\e[?25l" + - delay: 602 + content: "\e[?25l\e[35;41H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[15;2H\e(B\e[m\e[34;46m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34;46m\e]8;;\e\\48a87893\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Add Webpack for asset bu\e[16;2H\e(B\e[m\e[93;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[93;44m\e[1m\e]8;;\e\\d67e7e35\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Handle session timeout g\e[22;32H\e(B\e[m\e[32m\e[1m\e]8;;\e\\2\e[?25l" + - delay: 11 + content: "\e[?25l\e[2;49H\e(B\e[m\e[33m\e]8;;\e\\d67e\e[2;54He35b0\e[2;60Hfd\e[2;63Hb5\e[2;66H681ce7434d21aad947264e3\e(B\e[m\e]8;;\e\\ \e[6;46HHandl\e[6;52H session timeout gracefully\e[?25l" + - delay: 123 + content: "\e[?25l\e[35;41H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing c \e[?25l" + - delay: 10 + content: "\e[?25l\e[16;2H\e(B\e[m\e[94;46m\e[1m\e]8;;\e\\ﰖ\e[16;4Hd67e7e35\e[35;96H\e(B\e[m\e[36m\e]8;;\e\\2 com\e[35;102Hits\e[?25l" + - delay: 9 + content: "\e[?25l\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;50H\e(B\e[m\e[36m\e[1m\e]8;;\e\\4\e[?25l" + - delay: 5 + content: "\e[?25l\e[1;43H\e(B\e[m\e[30m\e]8;;\e\\Patch─\e[14;1H┌─Commits (feature/user-module)────────┐\e[15;1H│\e[15;40H▲\e[16;1H│\e(B\e[m\e[34;46m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34;46m\e]8;;\e\\d67e7e35\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Handle session timeout g\e(B\e[m\e[30m\e]8;;\e\\█\e[17;1H│\e[17;40H│\e[18;1H│\e[18;40H│\e[19;1H│\e[19;40H│\e[20;1H│\e[20;40H│\e[21;1H│\e[21;40H▼\e[22;1H└──────────────────────────────2 of 53─┘\e[23;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────┐\e[24;1H│\e(B\e[m\e[93;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[93;44m\e[1m\e]8;;\e\\ec1c9e19\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Remove unused code and l\e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[25;1H│\e[25;40H█\e[26;1H│\e[26;40H│\e[27;1H│\e[27;40H│\e[28;1H│\e[28;40H│\e[29;1H│\e[29;40H│\e[30;1H│\e[30;40H▼\e[31;1H└──────────────────────────────1 of 53─┘\e[?25l" + - delay: 10 + content: "\e[?25l\e[2;49H\e(B\e[m\e[33m\e]8;;\e\\ec1c9\e[2;55H19c678381d01a44\e[2;71Hf9820c56d1aeeff58c (\e(B\e[m\e[36m\e[1m\e]8;;\e\\HEAD -> \e(B\e[m\e[32m\e[1m\e]8;;\e\\hotfix/fix-bug\e(B\e[m\e[33m\e]8;;\e\\)\e[6;46H\e(B\e[m\e]8;;\e\\Remov\e[6;53Hunu\e[6;57Hed code and\e[6;69Hlibraries \e[?25l" + - delay: 603 + content: "\e[?25l\e[35;50H\e(B\e[m\e[36m\e[1m\e]8;;\e\\v\e[?25l\e[?25l\e[16;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Cherry-pick───────────────────────────────────────────────────────────────────┐\e[17;21H│\e(B\e[m\e[1m\e]8;;\e\\Are you sure you want to cherry-pick the copied commits onto this branch? \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;21H└───────────────────────────────────────────────────────────────────────────────┘\e[23;1H\e(B\e[m\e[30m\e]8;;\e\\┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────┐\e[24;1H│\e[24;40H▲\e[25;1H│\e[25;40H█\e[26;1H│\e[26;40H│\e[27;1H│\e[27;40H│\e[28;1H│\e[28;40H│\e[29;1H│\e[29;40H│\e[30;1H│\e[30;40H▼\e[31;1H└──────────────────────────────1 of 53─┘\e[?25l" + - delay: 1602 + content: "\e[?25l\e[35;50H\e(B\e[m\e[36m\e[1m\e]8;;\e\\\e[?25l" + - delay: 8 + content: "\e[?25l\e[16;21H\e(B\e[m\e]8;;\e\\e session timeout g\e(B\e[m\e[30m\e]8;;\e\\█│\e(B\e[m\e]8;;\e\\ \e[17;21Hug in timezone conv\e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e[18;21Hconstants to a sepa\e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e[23;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────┐\e[24;1H│\e[24;40H▲\e[25;1H│\e[25;40H█\e[26;1H│\e[26;40H│\e[27;1H│\e[27;40H│\e[28;1H│\e[28;40H│\e[29;1H│\e[29;40H│\e[30;1H│\e[30;40H▼\e[31;1H└──────────────────────────────1 of 53─┘\e[33;42H\e(B\e[m\e]8;;\e\\merges\e[33;49HHEAD\e[?25l" + - delay: 9 + content: "\e[?25l\e[?25l" + - delay: 36 + content: "\e[?25l\e[?25l" + - delay: 50 + content: "\e[?25l\e[?25l" + - delay: 30 + content: "\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[24;4H\e(B\e[m\e[93;44m\e[1m\e]8;;\e\\ddae87b7\e[24;16H\e(B\e[m\e[44m\e[1m\e]8;;\e\\Add W\e[24;22Hbpack for asset bu\e[25;4H\e(B\e[m\e[33m\e]8;;\e\\c139fcbb\e[25;16H\e(B\e[m\e]8;;\e\\Handle s\e[25;25Hs\e[25;27Hion time\e[25;36Hut g\e[26;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[26;4Hec1c9e19\e[26;16H\e(B\e[m\e]8;;\e\\Remove unused code and l\e[27;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[27;4Hb001b8e4\e[27;16H\e(B\e[m\e]8;;\e\\Int\e[27;20Hgrate support\e[27;34Hfor m\e[28;4H\e(B\e[m\e[32m\e]8;;\e\\5cf47\e[28;10Hea\e[28;16H\e(B\e[m\e]8;;\e\\Fix bug\e[28;24Hin tim\e[28;31Hzone\e[28;36Hconv\e[29;4H\e(B\e[m\e[32m\e]8;;\e\\e1\e[29;7Hbf291\e[29;16H\e(B\e[m\e]8;;\e\\Move c\e[29;23Hnstants to \e[29;35H sepa\e[30;4H\e(B\e[m\e[32m\e]8;;\e\\b2509f99\e[30;18H\e(B\e[m\e]8;;\e\\hance user search\e[30;36Hwith\e[31;38H\e(B\e[m\e[32m\e[1m\e]8;;\e\\5\e[?25l\e[?25l\e[?25l" + - delay: 12 + content: "\e[?25l\e[2;49H\e(B\e[m\e[33m\e]8;;\e\\ddae87b7ece5abafc2d52d9253f1005047f3c0f5\e[6;46H\e(B\e[m\e]8;;\e\\Add W\e[6;52Hbpack for asset bundling \e[?25l" + - delay: 33 + content: "\e[?25l\e[?25l" + - delay: 609 + content: "\e[?25l\e[35;52H\e(B\e[m\e[36m\e[1m\e]8;;\e\\sc> \e[?25l" + - delay: 20 + content: "\e[?25l\e[15;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[15;4H48a87893\e[16;2Hﰖ\e[16;4Hd67e7e35\e[35;96H\e(B\e[m\e[36m\e[1m\e]8;;\e\\ \e[?25l" + - delay: 16 + content: "\e[?25l\e[?25l" + - delay: 602 + content: "\e[?25l\e[35;41H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[35;8H \e[35;13H \e[35;21H \e[35;26H \e[35;34H \e[?25l" + - delay: 3001 + content: | + 2023/08/02 22:20:22 gocui should have already exited + 2023/08/02 22:20:22 exit status 1 + exit status 1 diff --git a/demo/interactive_rebase-compressed.gif b/demo/interactive_rebase-compressed.gif new file mode 100644 index 000000000..6af5c89c1 Binary files /dev/null and b/demo/interactive_rebase-compressed.gif differ diff --git a/demo/interactive_rebase.gif b/demo/interactive_rebase.gif new file mode 100644 index 000000000..c4fb2633b Binary files /dev/null and b/demo/interactive_rebase.gif differ diff --git a/demo/interactive_rebase.yml b/demo/interactive_rebase.yml new file mode 100644 index 000000000..1d51d0f3f --- /dev/null +++ b/demo/interactive_rebase.yml @@ -0,0 +1,275 @@ +# The configurations that used for the recording, feel free to edit them +config: + + # Specify a command to be executed + # like `/bin/bash -l`, `ls`, or any other commands + # the default is bash for Linux + # or powershell.exe for Windows + command: go run cmd/integration_test/main.go cli --slow pkg/integration/tests/demo/interactive_rebase.go + + # Specify the current working directory path + # the default is the current working directory path + cwd: /Users/jesseduffieldduffield/repos/lazygit + + # Export additional ENV variables + env: + recording: true + + # Explicitly set the number of columns + # or use `auto` to take the current + # number of columns of your shell + cols: 120 # 100 + + # Explicitly set the number of rows + # or use `auto` to take the current + # number of rows of your shell + rows: 35 # 30 + + # Amount of times to repeat GIF + # If value is -1, play once + # If value is 0, loop indefinitely + # If value is a positive number, loop n times + repeat: 0 + + # Quality + # 1 - 100 + # Higher quality seems to make no difference, but running it through + # gifsicle ends up with a much better compressed version. + quality: 100 + + # Delay between frames in ms + # If the value is `auto` use the actual recording delays + frameDelay: auto + + # Maximum delay between frames in ms + # Ignored if the `frameDelay` isn't set to `auto` + # Set to `auto` to prevent limiting the max idle time + maxIdleTime: 2000 + + # The surrounding frame box + # The `type` can be null, window, floating, or solid` + # To hide the title use the value null + # Don't forget to add a backgroundColor style with a null as type + frameBox: + type: floating + title: Lazygit + style: + border: 0px black solid + backgroundColor: "#1d1d1d" + margin: -5px + + # Add a watermark image to the rendered gif + # You need to specify an absolute path for + # the image on your machine or a URL, and you can also + # add your own CSS styles + watermark: + imagePath: null + style: + position: absolute + right: 15px + bottom: 15px + width: 100px + opacity: 0.9 + + # Cursor style can be one of + # `block`, `underline`, or `bar` + cursorStyle: block + + # Font family + # You can use any font that is installed on your machine + # in CSS-like syntax + fontFamily: "DejaVuSansMono Nerd Font" + + # The size of the font + fontSize: 8 + + # The height of lines + lineHeight: 1 + + # The spacing between letters + letterSpacing: 0 + + # Theme + theme: + background: "transparent" + foreground: "#dddad6" + cursor: "#c7c7c7" + black: "#7a7a7a" + red: "#fc4384" + green: "#b3e33b" + yellow: "#ffa727" + blue: "#102895" + magenta: "#c930c7" + cyan: "#00c5c7" + white: "#c7c7c7" + brightBlack: "#676767" + brightRed: "#ff7fac" + brightGreen: "#c8ed71" + brightYellow: "#ebdf86" + brightBlue: "#6871ff" + brightMagenta: "#ff76ff" + brightCyan: "#5ffdff" + brightWhite: "#fffefe" + +# Records, feel free to edit them +records: + - delay: 6203 + content: "\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?2004l\e[?1049h\e[22;0;0t\e[?1h\e=\e[?25l\e[H\e[2J" + - delay: 12 + content: "\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?1000h\e[?1002h\e[?1003h\e[?1006h\e[?1004h" + - delay: 95 + content: "\e[?25l\e[1;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\35a65e90\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\(HEAD -> feature/demo, origin/master, origin/feature/demo, master)\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add a user-f\e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[3;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\0592f88d\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Set up CI/CD pipeline using GitHub actions \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[4;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\43f18f64\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enable gzip compression for faster page loads \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[5;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\5e665417\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor error messages for better clarity \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[6;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\d4a39820\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve accessibility of site navigation \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[7;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\36fe6a5f\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add loading indicators to improve UX \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[8;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\99c0c435\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add end-to-end tests for checkout flow \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[9;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\bb8c6517\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Fix broken links on the help page \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[10;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\a50faf19\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement automated backups for database \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[11;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\7d906ffa\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add TypeScript types to User module \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[12;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\7211f4a4\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Move constants to a separate config file \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[13;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\7daf645c\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance user search with fuzzy matching \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[14;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\1214f2c8\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor session management using JWT \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[15;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\4e36b250\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure atomicity of transactions in payment system \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[16;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\498316af\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle database connection failures gracefully \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[17;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\b31a9ab6\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update styles according to new design guidelines \e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[18;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\6067780e\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Replace deprecated lifecycle methods in React components \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[19;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\11fc8fc5\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Revamp error handling in user registration \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[20;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\84452945\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle edge case for zero quantity in cart \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[21;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\bd85fcaf\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce retry mechanism in network calls \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[22;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\826ca60a\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Remove hardcoded values from payment module \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[23;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\24589ef4\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance logging in production environment \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[24;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\ff25fec4\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add internationalization support for German \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[25;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\a8888108\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update UX of password reset feature \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[26;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\8c545381\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Migrate legacy codebase to Typescript \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[27;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\60f54d81\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Resolve race condition in transaction handling \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[28;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\32894013\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Harden security of user password storage \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[29;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\f56521ca\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement bulk delete feature in admin panel \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[30;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\31335e7a\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure CSRF protection for all forms \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[31;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\43dff913\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce Redis for session management \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[32;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\526776f0\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve Dockerfile for more efficient builds \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[33;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\d7620639\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement user blocking functionality \e(B\e[m\e[32m\e[1m\e]8;;\e\\▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────1 of 60─┘\e[35;1H\e(B\e[m\e[34m\e]8;;\e\\/: Scroll, : Cancel, q: Quit, ?: Keybindings, 1-5: Jump to panel, H/L: Scroll left/right \e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\Interactive\e[35;13Hrebase\e[?25l" + - delay: 1003 + content: "\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[2;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\35a65e90\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[35m\e[1m\e]8;;\e\\(HEAD -> feature/demo, origin/master, origin/feature/demo, master)\e(B\e[m\e]8;;\e\\ Add a user-f\e[3;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\0592f88d\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Set up CI/CD pipeline using GitHub actions \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\2\e[?25l" + - delay: 12 + content: "\e[?25l\e[?25l" + - delay: 121 + content: "\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[3;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\0592f88d\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Set up CI/CD pipeline using GitHub actions \e[4;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\43f18f64\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Enable gzip compression for faster page loads \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\3\e[?25l" + - delay: 10 + content: "\e[?25l\e[?25l" + - delay: 123 + content: "\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[4;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\43f18f64\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enable gzip compression for faster page loads \e[5;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\5e665417\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Refactor error messages for better clarity \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\4\e[?25l" + - delay: 10 + content: "\e[?25l\e[?25l" + - delay: 122 + content: "\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[5;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\5e665417\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor error messages for better clarity \e[6;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\d4a39820\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Improve accessibility of site navigation \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\5\e[?25l" + - delay: 9 + content: "\e[?25l\e[?25l" + - delay: 122 + content: "\e[?25l\e[?25l\e[?25l\e[6;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\d4a39820\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve accessibility of site navigation \e[7;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\36fe6a5f\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add loading indicators to improve UX \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\6\e[?25l" + - delay: 10 + content: "\e[?25l\e[?25l" + - delay: 123 + content: "\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[7;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\36fe6a5f\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add loading indicators to improve UX \e[8;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\99c0c435\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add end-to-end tests for checkout flow \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\7\e[?25l" + - delay: 10 + content: "\e[?25l\e[?25l" + - delay: 124 + content: "\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[8;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\99c0c435\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add end-to-end tests for checkout flow \e[9;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\bb8c6517\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Fix broken links on the help page \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\8\e[?25l" + - delay: 9 + content: "\e[?25l\e[?25l" + - delay: 122 + content: "\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[9;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\bb8c6517\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Fix broken links on the help page \e[10;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\a50faf19\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Implement automated backups for database \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\9\e[?25l" + - delay: 10 + content: "\e[?25l\e[?25l" + - delay: 123 + content: "\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[10;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\a50faf19\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement automated backups for database \e[11;2H\e(B\e[m\e[92;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[92;44m\e[1m\e]8;;\e\\7d906ffa\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add TypeScript types to User module \e[34;111H\e(B\e[m\e[32m\e[1m\e]8;;\e\\10\e[?25l" + - delay: 9 + content: "\e[?25l\e[?25l" + - delay: 123 + content: "\e[?25l\e[35;20H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing e \e[?25l\e[?25l\e[?25l" + - delay: 49 + content: "\e[?25l\e[35;104H\e(B\e[m\e[33m\e]8;;\e\\Rebasing \e(B\e[m\e[33m\e[4m\e]8;;\e\\(Reset) \e[?25l" + - delay: 32 + content: "\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[?25l" + - delay: 6 + content: "\e[?25l\e[?25l\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[?25l" + - delay: 32 + content: "\e[?25l\e[2;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[2;4H35a65e90\e[2;21H\e(B\e[m\e[36m\e]8;;\e\\pick\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[2;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[35m\e[1m\e]8;;\e\\(origin/master, \e[2;62Hrigin/feature/dem\e[2;80H, master, feature/de\e[2;101Ho)\e(B\e[m\e]8;;\e\\ Add\e[2;108Ha user-frien\e[3;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[3;4H0592f88d\e[3;21H\e(B\e[m\e[36m\e]8;;\e\\pick\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[3;38H \e[3;45H\e(B\e[m\e]8;;\e\\Set up CI/CD p\e[3;60Hp\e[3;62Hline using GitHub actions\e[4;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[4;4H43f18f64\e[4;21H\e(B\e[m\e[36m\e]8;;\e\\pick\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[4;38H \e(B\e[m\e]8;;\e\\ Enable gzip compressi\e[4;67Hn\e[4;70Hor faster page loads\e[5;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[5;4H5e665417\e[5;21H\e(B\e[m\e[36m\e]8;;\e\\pick\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[5;38H \e(B\e[m\e]8;;\e\\ Refacto\e[5;53H error mes\e[5;64Hages\e[5;69Hfor better clarity\e[6;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[6;4Hd4a39820\e[6;21H\e(B\e[m\e[36m\e]8;;\e\\pick\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[6;38H \e(B\e[m\e]8;;\e\\ Improve access\e[6;60Hbility of site n\e[6;77Hv\e[6;79Hgation\e[7;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[7;4H36fe6a5f\e[7;21H\e(B\e[m\e[36m\e]8;;\e\\pick\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[7;38H \e[7;45H\e(B\e[m\e]8;;\e\\Add load\e[7;55Hg indicators to improve\e[7;79HUX\e[8;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[8;4H99c0c435\e[8;21H\e(B\e[m\e[36m\e]8;;\e\\pick\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[8;38H \e[8;45H\e(B\e[m\e]8;;\e\\Ad\e[8;48H end-to-end tests\e[8;66Hfor checkout flow\e[9;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[9;4Hbb8c6517\e[9;21H\e(B\e[m\e[36m\e]8;;\e\\pick\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[9;38H \e[9;45H\e(B\e[m\e]8;;\e\\Fix broke\e[9;55H links on\e[9;65Hthe help page\e[10;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[10;4Ha50faf19\e[10;21H\e(B\e[m\e[36m\e]8;;\e\\pick\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[10;38H \e(B\e[m\e]8;;\e\\ I\e[10;47Hplemen\e[10;54H au\e[10;58Homated backups\e[10;73Hfor d\e[10;79Htabase\e[11;21H\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e[11;38H \e[11;45H\e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[95;44m\e[1m\e]8;;\e\\(HEAD)\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[93;44m\e[1m\e]8;;\e\\<-- YOU ARE HERE ---\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add\e[11;79HTypeScript\e[11;90Htypes\e[11;96Hto\e[11;99HUser\e[11;104Hmodule\e[12;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[12;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Move cons\e[12;57Hants to a s\e[12;69Hparate config\e[12;83Hfile\e[13;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[13;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance user search with\e[13;72Hfuzzy matching\e[14;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[14;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor session \e[14;65Ha\e[14;67Hageme\e[14;73Ht\e[14;75Husing\e[14;81HJWT\e[15;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[15;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure a\e[15;56Homici\e[15;62Hy of transactions in payment system\e[16;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[16;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle databas\e[16;62H con\e[16;67Hect\e[16;71Hon failures gracefully\e[17;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[17;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Updat\e[17;53H styles accordi\e[17;69Hg to new des\e[17;82Hgn guidelines\e[18;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[18;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Replac\e[18;54H deprecat\e[18;64Hd lifecycle methods in\e[18;87HReact components\e[19;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[19;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ R\e[19;49Hvamp\e[19;54Herror handling in user \e[19;78Heg\e[19;81Hstration\e[20;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[20;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle edge case f\e[20;66Hr zero quantity in\e[20;85Hcart\e[21;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[21;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce\e[21;57Hr\e[21;59Htry mecha\e[21;69Hism in network\e[21;84Hcalls\e[22;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[22;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Remove hardcoded values from payment module\e[23;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[23;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance logging in pr\e[23;69Hduction environment\e[24;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[24;38H \e[24;45H◯\e(B\e[m\e]8;;\e\\ Add internationalization support for German\e[25;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[25;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update\e[25;54HUX of password\e[25;69Hr\e[25;71Hset feature\e[26;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[26;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Migrate legacy codebase to Ty\e[26;77Hescript\e[27;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[27;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Resolve race c\e[27;63Hd\e[27;65Htion in transaction handling\e[28;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[28;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Harden security of u\e[28;68Her pas\e[28;75Hw\e[28;78Hd storage\e[29;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[29;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement bulk dele\e[29;67He feature \e[29;80Hadmin\e[29;86Hpanel\e[30;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[30;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure CSRF pr\e[30;62Htection for all\e[30;78Hforms\e[31;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[31;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce\e[31;57HRedi\e[31;62H for session \e[31;76Ha\e[31;78Hagement\e[32;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[32;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improv\e[32;54H Dockerfile for more \e[32;76Hfficient builds\e[33;21H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[33;38H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implem\e[33;54Hnt user blocking functionality\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l" + - delay: 5 + content: "\e[?25l\e[?25l\e[?25l\e[?25l" + - delay: 601 + content: "\e[?25l\e[35;20H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l" + - delay: 6 + content: "\e[?25l\e[10;2H\e(B\e[m\e[93;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[93;44m\e[1m\e]8;;\e\\a50faf19\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[96;44m\e[1m\e]8;;\e\\pick\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ Implement automated backups for database \e[11;2H\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\7d906ffa\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[35m\e[1m\e]8;;\e\\(HEAD)\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[33m\e]8;;\e\\<-- YOU ARE HERE ---\e(B\e[m\e]8;;\e\\ Add TypeScript types to User module \e[34;111H\e(B\e[m\e[32m\e[1m\e]8;;\e\\─9\e[?25l" + - delay: 9 + content: "\e[?25l\e[?25l" + - delay: 122 + content: "\e[?25l\e[35;20H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing d \e[?25l" + - delay: 29 + content: "\e[?25l\e[2;2H\e(B\e[m\e[34m\e]8;;\e\\ﰖ\e[2;4H35a65e90\e[3;2Hﰖ\e[3;4H0592f88d\e[4;2Hﰖ\e[4;4H43f18f64\e[5;2Hﰖ\e[5;4H5e665417\e[6;2Hﰖ\e[6;4Hd4a39820\e[7;2Hﰖ\e[7;4H36fe6a5f\e[8;2Hﰖ\e[8;4H99c0c435\e[9;2Hﰖ\e[9;4Hbb8c6517\e[10;2H\e(B\e[m\e[94;44m\e[1m\e]8;;\e\\ﰖ\e[10;4Ha50faf19\e[10;21H\e(B\e[m\e[91;44m\e[1m\e]8;;\e\\drop\e[?25l" + - delay: 10 + content: "\e[?25l\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;20H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l" + - delay: 45 + content: "\e[?25l\e[9;2H\e(B\e[m\e[94;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\bb8c6517\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[96;44m\e[1m\e]8;;\e\\pick\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ Fix broken links on the help page \e[10;2H\e(B\e[m\e[34m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\a50faf19\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[31m\e]8;;\e\\drop\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ Implement automated backups for database \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\8\e[?25l" + - delay: 10 + content: "\e[?25l\e[?25l" + - delay: 122 + content: "\e[?25l\e[35;20H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing s \e[?25l" + - delay: 26 + content: "\e[?25l\e[2;27H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[2;44H \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[35m\e[1m\e]8;;\e\\(or\e[2;51Hgin/master, or\e[2;66Hgin/feature/demo, master, feature/demo)\e(B\e[m\e]8;;\e\\ Add\e[2;110Ha user-fri\e[3;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[3;44H \e(B\e[m\e]8;;\e\\ Set up CI/CD \e[3;61Hipeline using GitHub actions\e[4;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[4;44H \e(B\e[m\e]8;;\e\\ Enable gzip compression for faster page loads\e[5;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[5;44H \e(B\e[m\e]8;;\e\\ Refactor er\e[5;59Hor messages for better clarity\e[6;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[6;44H \e(B\e[m\e]8;;\e\\ Improve access\e[6;62Hb\e[6;64Hlity of site navigation\e[7;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[7;44H \e(B\e[m\e]8;;\e\\ Add loading indicators to improve UX\e[8;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[8;44H \e(B\e[m\e]8;;\e\\ Add end-to-end te\e[8;65Hts for checkout flow\e[9;21H\e(B\e[m\e[93;44m\e[1m\e]8;;\e\\squash\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e[9;44H \e(B\e[m\e[44m\e[1m\e]8;;\e\\ Fix broken links on the hel\e[9;75H page\e[10;27H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[10;44H \e(B\e[m\e]8;;\e\\ Impl\e[10;52Hment automated backups for d\e[10;81Ht\e[10;83Hbase\e[11;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[11;44H \e[11;47H◯\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[35m\e[1m\e]8;;\e\\(HEAD)\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[33m\e]8;;\e\\<-- YOU ARE H\e[11;70HRE \e[11;74H--\e(B\e[m\e]8;;\e\\ Add TypeScrip\e[11;91H types to User module\e[12;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[12;44H \e[12;47H◯\e(B\e[m\e]8;;\e\\ Move constants to\e[12;67Ha sep\e[12;73Hrate config file\e[13;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[13;44H \e[13;47H◯\e(B\e[m\e]8;;\e\\ Enhance user search with fuzzy matching\e[14;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[14;44H \e[14;47H◯\e(B\e[m\e]8;;\e\\ Refactor \e[14;59Hession m\e[14;68Hnag\e[14;72Hment using JWT\e[15;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[15;44H \e[15;47H◯\e(B\e[m\e]8;;\e\\ Ensure atom\e[15;61Hcity of transactions in payment \e[15;94Hystem\e[16;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[16;44H \e[16;47H◯\e(B\e[m\e]8;;\e\\ Handle d\e[16;58Ht\e[16;60Hbase connection failures gracefully\e[17;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[17;44H \e[17;47H◯\e(B\e[m\e]8;;\e\\ Update styles according to new design guidelines\e[18;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[18;44H \e[18;47H◯\e(B\e[m\e]8;;\e\\ Replace deprecated life\e[18;73Hycle methods in React compo\e[18;101Hents\e[19;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[19;44H \e[19;47H◯\e(B\e[m\e]8;;\e\\ Revamp er\e[19;59Hor handling in use\e[19;78H registration\e[20;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[20;44H \e[20;47H◯\e(B\e[m\e]8;;\e\\ Handl\e[20;55H edge case for zero quan\e[20;80Hity in cart\e[21;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[21;44H \e[21;47H◯\e(B\e[m\e]8;;\e\\ Introduce retry mechanism i\e[21;77H network calls\e[22;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[22;44H \e[22;47H◯\e(B\e[m\e]8;;\e\\ Remove hardco\e[22;63Hed values from payment module\e[23;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[23;44H \e[23;47H◯\e(B\e[m\e]8;;\e\\ Enhance logging in production environment\e[24;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[24;44H \e[24;47H◯\e(B\e[m\e]8;;\e\\ Add internationalization support for German\e[25;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[25;44H \e[25;47H◯\e(B\e[m\e]8;;\e\\ Update UX of password r\e[25;73Hset feature\e[26;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[26;44H \e[26;47H◯\e(B\e[m\e]8;;\e\\ Migrate legacy codebase to Typescript\e[27;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[27;44H \e[27;47H◯\e(B\e[m\e]8;;\e\\ Resolve race cond\e[27;67Htion in transaction handling\e[28;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[28;44H \e[28;47H◯\e(B\e[m\e]8;;\e\\ Harden security of user password storage\e[29;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[29;44H \e[29;47H◯\e(B\e[m\e]8;;\e\\ Impl\e[29;54Hment bulk d\e[29;66Hl\e[29;68Hte feature in admin panel\e[30;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[30;44H \e[30;47H◯\e(B\e[m\e]8;;\e\\ Ensure CSRF protection for all forms\e[31;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[31;44H \e[31;47H◯\e(B\e[m\e]8;;\e\\ Introduce Redis for \e[31;70Hession m\e[31;79Hnag\e[31;83Hment\e[32;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[32;44H \e[32;47H◯\e(B\e[m\e]8;;\e\\ Improve Dockerfile for mor\e[32;76H eff\e[32;81Hcient builds\e[33;27H \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e[33;44H \e[33;47H◯\e(B\e[m\e]8;;\e\\ Impl\e[33;54Hment user blocking functionality\e[?25l" + - delay: 9 + content: "\e[?25l\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;20H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l" + - delay: 8 + content: "\e[?25l\e[8;2H\e(B\e[m\e[94;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\99c0c435\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[94;44m\e[1m\e]8;;\e\\10:10PM\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[96;44m\e[1m\e]8;;\e\\pick\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add end-to-end tests for checkout flow \e[9;2H\e(B\e[m\e[34m\e]8;;\e\\ﰖ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\bb8c6517\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[34m\e]8;;\e\\10:10PM\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[33m\e]8;;\e\\squash\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ Fix broken links on the help page \e[34;112H\e(B\e[m\e[32m\e[1m\e]8;;\e\\7\e[?25l" + - delay: 11 + content: "\e[?25l\e[?25l" + - delay: 122 + content: "\e[?25l\e[35;20H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing f \e[?25l" + - delay: 25 + content: "\e[?25l\e[8;21H\e(B\e[m\e[95;44m\e[1m\e]8;;\e\\fixup\e[?25l" + - delay: 9 + content: "\e[?25l\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;29H\e(B\e[m\e[36m\e[1m\e]8;;\e\\m\e[?25l\e[?25l\e[1;1H\e(B\e[m\e[30m\e]8;;\e\\┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e[2;120H▲\e[3;1H│\e[3;120H█\e[4;1H│\e[4;120H█\e[5;1H│\e[5;120H█\e[6;1H│\e[6;120H█\e[7;1H│\e[7;120H█\e[8;1H│\e[8;120H█\e[9;1H│\e[9;120H█\e[10;1H│\e[10;120H█\e[11;1H│\e[11;120H█\e[12;1H│\e[12;120H█\e[13;1H│\e[13;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Rebase options────────────────────────────────────────────────────────────────┐\e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;1H│\e[14;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[96;44m\e[1m\e]8;;\e\\c\e(B\e[m\e[44m\e[1m\e]8;;\e\\ continue \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[14;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[15;1H│\e[15;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\a\e[15;24H\e(B\e[m\e]8;;\e\\abort \e[15;47H \e[15;49H \e[15;56H \e[15;66H \e[15;69H \e[15;82H \e[15;85H \e[15;93H \e[15;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[15;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[16;1H│\e[16;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\s\e[16;24H\e(B\e[m\e]8;;\e\\skip\e[16;29H \e[16;47H \e[16;49H \e[16;56H \e[16;65H \e[16;76H \e[16;85H \e[16;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[16;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[17;1H│\e[17;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[17;24H\e(B\e[m\e]8;;\e\\Cancel \e[17;47H \e[17;49H \e[17;56H \e[17;63H \e[17;73H \e[17;76H \e[17;80H \e[17;87H \e[17;101H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[17;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[18;1H│\e[18;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└────────────────────────────────────────────────────────────────────────1 of 4─┘\e[18;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[19;1H│\e[19;120H│\e[20;1H│\e[20;120H│\e[21;1H│\e[21;120H│\e[22;1H│\e[22;120H│\e[23;1H│\e[23;120H│\e[24;1H│\e[24;120H│\e[25;1H│\e[25;120H│\e[26;1H│\e[26;120H│\e[27;1H│\e[27;120H│\e[28;1H│\e[28;120H│\e[29;1H│\e[29;120H│\e[30;1H│\e[30;120H│\e[31;1H│\e[31;120H│\e[32;1H│\e[32;120H│\e[33;1H│\e[33;120H▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────7 of 60─┘\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;29H\e(B\e[m\e[36m\e[1m\e]8;;\e\\\e[?25l" + - delay: 242 + content: "\e[?25l\e[1;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────────────────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[2;4H470ea494\e[2;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[2;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[35m\e[1m\e]8;;\e\\(HEAD -> feature/d\e[2;60Hmo)\e(B\e[m\e]8;;\e\\ Add a user-friendly 404 page \e[2;106H \e[2;110H \e[2;112H \e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e[3;1H│\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[3;4Hb5af2bfe\e[3;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[3;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Set up CI/CD\e[3;54Hpipeline us\e[3;67Hg\e[3;69HGitHub actions \e[3;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[4;1H│\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[4;4H8b012284\e[4;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[4;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enable gzip compression for faster pag\e[4;80H lo\e[4;84Hds\e[4;87H \e[4;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[5;1H│\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[5;4H32e049e1\e[5;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[5;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor err\e[5;56Hmessages for better clarity \e[5;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[6;1H│\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[6;4H254146a1\e[6;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[6;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve accessibility of site navigation \e[6;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[7;1H│\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[7;4H1800c621\e[7;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[7;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add loa\e[7;49Hing indicators to impr\e[7;72Hve UX \e[7;81H \e[7;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[8;1H│\e(B\e[m\e[91;44m\e[1m\e]8;;\e\\ﰖ\e[8;4H9b24c491\e[8;21H\e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI \e[8;38H\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[97;44m\e[1m\e]8;;\e\\◯\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add TypeScript types\e[8;63Ho U\e[8;67Her module \e[8;81H \e[8;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[9;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[9;4H7211f4a4\e[9;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[9;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Move constants to a separa\e[9;68He config file\e[9;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[10;1H│\e(B\e[m\e[32m\e]8;;\e\\ﰖ\e[10;4H7daf645c\e[10;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[10;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance us\e[10;52Hr search wi\e[10;64Hh fuzzy matching \e[10;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[11;1H│\e[11;4H\e(B\e[m\e[32m\e]8;;\e\\1214f2c8\e[11;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[11;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor session management using JWT \e[11;81H \e[11;92H \e[11;98H \e[11;101H \e[11;106H \e[11;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[12;1H│\e[12;4H\e(B\e[m\e[32m\e]8;;\e\\4e36b250\e[12;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[12;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure at\e[12;51Hmicity of \e[12;62Hransactions in payment\e[12;85Hsystem\e[12;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[13;1H│\e[13;4H\e(B\e[m\e[32m\e]8;;\e\\498316af\e[13;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Handle database connection failures gracefully \e[13;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[14;1H│\e[14;4H\e(B\e[m\e[32m\e]8;;\e\\b3\e[14;7Ha9ab6\e[14;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update styles according to new design guidelines \e[14;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[15;1H│\e[15;4H\e(B\e[m\e[32m\e]8;;\e\\6067780e\e[15;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[15;39H◯\e[15;41H\e(B\e[m\e]8;;\e\\Replace\e[15;49Hdeprecated\e[15;60Hlifecycle\e[15;70Hmethods\e[15;78Hin\e[15;81HReact\e[15;87Hcomponents\e[15;101H \e[15;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[16;1H│\e[16;4H\e(B\e[m\e[32m\e]8;;\e\\11fc8fc5\e[16;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[16;39H◯\e[16;41H\e(B\e[m\e]8;;\e\\Revamp\e[16;48Herror\e[16;54Hhandling\e[16;63Hin\e[16;66Huser\e[16;71Hregistration\e[16;101H \e[16;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[17;1H│\e[17;4H\e(B\e[m\e[32m\e]8;;\e\\84452945\e[17;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[17;39H◯\e[17;41H\e(B\e[m\e]8;;\e\\Handle\e[17;48Hedge\e[17;53Hcase\e[17;58Hfor\e[17;62Hzero\e[17;67Hquantity\e[17;76Hin\e[17;79Hcart\e[17;101H \e[17;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[18;1H│\e[18;4H\e(B\e[m\e[32m\e]8;;\e\\bd85fcaf\e[18;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce retry mechanism in network calls \e[18;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e[19;1H│\e[19;4H\e(B\e[m\e[32m\e]8;;\e\\826\e[19;8Ha60a\e[19;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[19;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Remove hardcoded values from payment module \e[19;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[20;1H│\e[20;4H\e(B\e[m\e[32m\e]8;;\e\\2\e[20;6H589ef4\e[20;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[20;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Enhance\e[20;49Hlogging in production \e[20;72Hnvironmen\e[20;82H \e[20;84H \e[20;87H \e[20;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[21;1H│\e[21;4H\e(B\e[m\e[32m\e]8;;\e\\ff2\e[21;9Hec4\e[21;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[21;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Add inter\e[21;51Hationaliza\e[21;62Hion support for\e[21;78HG\e[21;80Hrman \e[21;86H \e[21;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[22;1H│\e[22;4H\e(B\e[m\e[32m\e]8;;\e\\a88881\e[22;11H8\e[22;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[22;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Update UX of password reset f\e[22;71Hatu\e[22;75He \e[22;78H \e[22;86H \e[22;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[23;1H│\e[23;4H\e(B\e[m\e[32m\e]8;;\e\\8c\e[23;7H45381\e[23;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[23;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Migrate\e[23;49Hleg\e[23;53Hcy codebase\e[23;65Hto\e[23;68HTypes\e[23;74Hr\e[23;76Hpt\e[23;79H \e[23;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[24;1H│\e[24;4H\e(B\e[m\e[32m\e]8;;\e\\60f\e[24;8H4d81\e[24;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[24;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Resolve\e[24;49Hrace condition in transaction handling \e[24;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[25;1H│\e[25;4H\e(B\e[m\e[32m\e]8;;\e\\32\e[25;7H94013\e[25;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[25;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Harden security of user passwo\e[25;72Hd s\e[25;76Horage \e[25;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[26;1H│\e[26;4H\e(B\e[m\e[32m\e]8;;\e\\f56521ca\e[26;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[26;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement bulk delete feature in admin panel \e[26;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[27;1H│\e[27;4H\e(B\e[m\e[32m\e]8;;\e\\31335e7a\e[27;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[27;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Ensure CSRF protection for all\e[27;72Hforms \e[27;87H \e[27;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[28;1H│\e[28;4H\e(B\e[m\e[32m\e]8;;\e\\43dff9\e[28;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[28;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Introduce Redis for session management \e[28;82H \e[28;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[29;1H│\e[29;4H\e(B\e[m\e[32m\e]8;;\e\\52\e[29;7H776f0\e[29;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[29;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Improve\e[29;49HDock\e[29;54Hrfile for\e[29;64Hmor\e[29;68H \e[29;70Hf\e[29;72Hicient\e[29;79Hbuil\e[29;84Hs \e[29;88H \e[29;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[30;1H│\e[30;4H\e(B\e[m\e[32m\e]8;;\e\\d7620639\e[30;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[30;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Implement user\e[30;56Hblocking functionality \e[30;80H \e[30;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[31;1H│\e[31;4H\e(B\e[m\e[32m\e]8;;\e\\200c55e2\e[31;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[31;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Refactor user notifications\e[31;70Hy\e[31;72Htem \e[31;77H \e[31;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[32;1H│\e[32;4H\e(B\e[m\e[32m\e]8;;\e\\8d4659bb\e[32;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[32;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Upgrade\e[32;49HRails version to 6.1.4\e[32;72H \e[32;77H \e[32;87H \e[32;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[33;1H│\e[33;4H\e(B\e[m\e[32m\e]8;;\e\\103cdca3\e[33;21H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI \e[33;38H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\◯\e(B\e[m\e]8;;\e\\ Move global variables to env\e[33;70Hronme\e[33;76Ht c\e[33;81Hfig \e[33;120H\e(B\e[m\e[32m\e[1m\e]8;;\e\\▼\e[34;1H└──────────────────────────────────────────────────────────────────────────────────────────────────────────────7 of 57─┘\e[35;104H\e(B\e[m\e[36m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[?25l\e[?25l\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\Push to remot\e[35;15H \e[35;20H \e[?25l\e[?25l\e[35;16H\e(B\e[m\e[36m\e[1m\e]8;;\e\\Pressing + \e[?25l" + - delay: 5 + content: "\e[?25l\e[1;1H\e(B\e[m\e[30m\e]8;;\e\\┌─Status───────────────────────────────┐┌─Patch────────────────────────────────────────────────────────────────────────┐\e[2;1H│\e(B\e[m\e[33m\e]8;;\e\\↑7↓10\e(B\e[m\e]8;;\e\\ repo\e[2;13H→ \e(B\e[m\e[32m\e]8;;\e\\feature/demo\e(B\e[m\e]8;;\e\\ \e[2;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[33m\e]8;;\e\\commit 9b24c49191fbe87694473353c45e7010a33fce48\e(B\e[m\e]8;;\e\\ \e[2;120H\e(B\e[m\e[30m\e]8;;\e\\▲\e[3;1H└──────────────────────────────────────┘│\e(B\e[m\e]8;;\e\\Author: CI \e[3;76H \e[3;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[4;1H┌─\e(B\e[m\e[32m\e]8;;\e\\Files \e(B\e[m\e[30m\e]8;;\e\\- Worktrees - Submodules───────┐│\e(B\e[m\e]8;;\e\\D\e[4;44Hte:\e[4;48H Wed Aug 2 22:10:04\e[4;69H2023 +1000 \e[4;81H \e[4;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[5;1H│\e(B\e[m\e[31m\e]8;;\e\\??  my-file.txt\e(B\e[m\e]8;;\e\\ \e[5;21H \e[5;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e[5;50H \e[5;56H \e[5;65H \e[5;69H \e[5;76H \e[5;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[6;1H│\e(B\e[m\e[31m\e]8;;\e\\??  my-other-file.rb \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ Add TypeScr\e[6;58Hpt types to User module\e[6;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[7;1H│\e(B\e[m\e]8;;\e\\ \e[7;4H \e[7;13H \e[7;21H \e[7;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e[7;45H \e[7;53H \e[7;64H \e[7;67H \e[7;75H \e[7;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[8;1H│\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ Fix broken links on the help page \e(B\e[m\e[30m\e]8;;\e\\█\e[9;1H│\e(B\e[m\e]8;;\e\\ \e[9;4H \e[9;13H \e[9;21H \e[9;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\---\e[9;46H \e[9;56H \e[9;59H \e[9;61H \e[9;70H \e[9;77H \e[9;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[10;1H│\e(B\e[m\e]8;;\e\\ \e[10;4H \e[10;13H \e[10;21H \e[10;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ \e[10;44Help_pag\e[10;52H/links.go \e[10;66H | 1 \e(B\e[m\e[32m\e]8;;\e\\+\e(B\e[m\e]8;;\e\\ \e[10;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[11;1H│\e(B\e[m\e]8;;\e\\ \e[11;4H \e[11;13H \e[11;21H \e[11;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ models/user_types.go |\e[11;69H1 \e(B\e[m\e[32m\e]8;;\e\\+\e(B\e[m\e]8;;\e\\ \e[11;75H \e[11;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[12;1H│\e(B\e[m\e]8;;\e\\ \e[12;4H \e[12;13H \e[12;21H \e[12;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ tests/checkout_tes\e[12;62H.sql | 1 \e(B\e[m\e[32m\e]8;;\e\\+\e(B\e[m\e]8;;\e\\ \e[12;74H \e[12;77H \e[12;85H \e[12;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[13;1H└───────────────────────────────1 of 2─┘│\e(B\e[m\e]8;;\e\\ 3 files ch\e[13;54Hnged, 3 insertions(+) \e[13;77H \e[13;120H\e(B\e[m\e[30m\e]8;;\e\\█\e[14;1H┌─\e(B\e[m\e[32m\e]8;;\e\\Local branches \e(B\e[m\e[30m\e]8;;\e\\- Remotes - Tags──────┐│\e(B\e[m\e]8;;\e\\ \e[14;48H \e[14;55H \e[14;65H \e[14;68H \e[14;72H \e[14;79H \e[14;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[15;1H│\e(B\e[m\e[32m\e]8;;\e\\ *\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\שׂ\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[32m\e]8;;\e\\feature/demo\e[15;21H\e(B\e[m\e[33m\e]8;;\e\\↑7↓10\e(B\e[m\e]8;;\e\\ \e[15;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[1m\e]8;;\e\\diff --git a/help_page/links.go b/help_page/links.go\e(B\e[m\e]8;;\e\\ \e[15;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[16;1H│\e(B\e[m\e[36m\e]8;;\e\\7s\e(B\e[m\e]8;;\e\\ שׂ master \e[16;21H \e[16;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[1m\e]8;;\e\\new file mode 100644\e[16;63H\e(B\e[m\e]8;;\e\\ \e[16;66H \e[16;71H \e[16;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[17;1H│\e(B\e[m\e]8;;\e\\ \e[17;4H \e[17;13H \e[17;21H \e[17;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[1m\e]8;;\e\\index 0000000..3566d0d\e(B\e[m\e]8;;\e\\ \e[17;67H \e[17;76H \e[17;79H \e[17;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[18;1H│\e(B\e[m\e]8;;\e\\ \e[18;4H \e[18;13H \e[18;21H \e[18;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[1m\e]8;;\e\\--- /dev/null\e(B\e[m\e]8;;\e\\ \e[18;57H \e[18;67H \e[18;70H \e[18;78H \e[18;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[19;1H│\e(B\e[m\e]8;;\e\\ \e[19;4H \e[19;13H \e[19;21H \e[19;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[1m\e]8;;\e\\+++ b/help_page/links.go\e(B\e[m\e]8;;\e\\ \e[19;70H \e[19;78H \e[19;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[20;1H│\e(B\e[m\e]8;;\e\\ \e[20;4H \e[20;13H \e[20;21H \e[20;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[36m\e]8;;\e\\@@ -0,0 +1 @@\e(B\e[m\e]8;;\e\\ \e[20;57H \e[20;60H \e[20;71H \e[20;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[21;1H│\e(B\e[m\e]8;;\e\\ \e[21;4H \e[21;13H \e[21;21H \e[21;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[32m\e]8;;\e\\+package help_page\e(B\e[m\e]8;;\e\\ \e[21;66H \e[21;74H \e[21;78H \e[21;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[22;1H└───────────────────────────────1 of 2─┘│\e(B\e[m\e]8;;\e\\\\ No newline \e[22;56Ht end of file \e[22;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[23;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\-\e[23;13HReflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────┐\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\diff --git a/models/user_types.go b/models/user_types.go\e[23;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[24;2H\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[24;4H470ea494\e[24;13H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Add a user-friendly 404 \e(B\e[m\e[32m\e[1m\e]8;;\e\\▲\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\new file mode 100644\e(B\e[m\e]8;;\e\\ \e[24;64H \e[24;67H \e[24;79H \e[24;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[25;2H\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[25;4Hb5af2bfe\e[25;13H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Set up CI/CD pipeline us\e(B\e[m\e[32m\e[1m\e]8;;\e\\█\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\index 0000000..778a4c0\e[25;65H\e(B\e[m\e]8;;\e\\ \e[25;74H \e[25;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[26;2H\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[26;4H8b012284\e[26;13H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Enable gzip compression \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\--- /dev/null\e[26;56H\e(B\e[m\e]8;;\e\\ \e[26;63H \e[26;71H \e[26;74H \e[26;80H \e[26;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[27;2H\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[27;4H32e049e1\e[27;13H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Refactor error messages \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[1m\e]8;;\e\\+++ b/models/user_types.go\e(B\e[m\e]8;;\e\\ \e[27;72H \e[27;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[28;2H\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[28;4H254146a1\e[28;13H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Improve accessibility of\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[36m\e]8;;\e\\@@ -0,0 +1 @@\e(B\e[m\e]8;;\e\\ \e[28;57H \e[28;61H \e[28;69H \e[28;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[29;2H\e(B\e[m\e[31m\e]8;;\e\\ﰖ\e[29;4H1800c621\e[29;13H\e(B\e[m\e[38;2;73;40;205m\e]8;;\e\\CI\e(B\e[m\e]8;;\e\\ Add loading indicators\e[29;39Ht\e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e[32m\e]8;;\e\\+package models\e(B\e[m\e]8;;\e\\ \e[29;60H \e[29;64H \e[29;69H \e[29;79H \e[29;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[30;2H\e(B\e[m\e[91;44m\e[1m\e]8;;\e\\ﰖ\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[91;44m\e[1m\e]8;;\e\\9b24c491\e(B\e[m\e[44m\e[1m\e]8;;\e\\ \e(B\e[m\e[38;2;73;40;205m\e[44m\e[1m\e]8;;\e\\CI\e(B\e[m\e[44m\e[1m\e]8;;\e\\ Add TypeScript types to \e(B\e[m\e[32m\e[1m\e]8;;\e\\▼\e(B\e[m\e[30m\e]8;;\e\\│\e(B\e[m\e]8;;\e\\\\ No newlin\e[30;54H at end of\e[30;66Hile \e[30;120H\e(B\e[m\e[30m\e]8;;\e\\▼\e[31;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└──────────────────────────────7 of 57─┘\e(B\e[m\e[30m\e]8;;\e\\└──────────────────────────────────────────────────────────────────────────────┘\e[32;1H┌─Stash────────────────────────────────┐┌─Command log──────────────────────────────────────────────────────────────────┐\e[33;1H│\e(B\e[m\e]8;;\e\\ \e[33;4H \e[33;13H \e[33;21H \e[33;39H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e]8;;\e\\ git rebase --continue\e[33;66H \e[33;78H \e[33;120H\e(B\e[m\e[30m\e]8;;\e\\│\e[34;1H└───────────────────────────────0 of 0─┘└──────────────────────────────────────────────────────────────────────────────┘\e[?25l\e[?25l\e[?25l" + - delay: 600 + content: "\e[?25l\e[35;25H\e(B\e[m\e[36m\e[1m\e]8;;\e\\P\e[?25l\e[?25l\e[16;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Force push────────────────────────────────────────────────────────────────────┐\e[17;21H│\e(B\e[m\e[1m\e]8;;\e\\Your branch has diverged from the remote branch. Press to cancel, or \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[18;21H│\e(B\e[m\e[1m\e]8;;\e\\ to force push. \e[18;46H \e(B\e[m\e[32m\e[1m\e]8;;\e\\│\e[19;21H└───────────────────────────────────────────────────────────────────────────────┘\e[23;1H\e(B\e[m\e[30m\e]8;;\e\\┌─\e(B\e[m\e[32m\e]8;;\e\\Commits \e(B\e[m\e[30m\e]8;;\e\\- Reflog─────────────────────┐\e[24;1H│\e[24;40H▲\e[25;1H│\e[25;40H█\e[26;1H│\e[26;40H│\e[27;1H│\e[27;40H│\e[28;1H│\e[28;40H│\e[29;1H│\e[29;40H│\e[30;1H│\e[30;40H▼\e[31;1H└──────────────────────────────7 of 57─┘\e[?25l" + - delay: 603 + content: "\e[?25l\e[35;25H\e(B\e[m\e[36m\e[1m\e]8;;\e\\\e[?25l\e[?25l\e[16;23H\e(B\e[m\e[32m\e[1m\e]8;;\e\\──────────\e[17;22H\e(B\e[m\e[1m\e]8;;\e\\Pushing...\e(B\e[m\e]8;;\e\\ \\ \e[18;21H\e(B\e[m\e[32m\e[1m\e]8;;\e\\└───────────────────────────────────────────────────────────────────────────────┘\e[19;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[1m\e]8;;\e\\+++ b/help_page/links.go\e(B\e[m\e]8;;\e\\ \e[?25l" + - delay: 11 + content: "\e[?25l\e[?25l" + - delay: 38 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\|\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\/\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\-\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\\\\e[?25l" + - delay: 51 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\|\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\/\e[?25l" + - delay: 49 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\-\e[?25l" + - delay: 51 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\\\\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\|\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\/\e[33;48Hpush --force-with-lease\e[?25l" + - delay: 50 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\-\e[?25l" + - delay: 49 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\\\\e[?25l" + - delay: 41 + content: "\e[?25l\e[17;33H\e(B\e[m\e]8;;\e\\|\e[33;43H+ 35a65e9...470ea49 feature/demo\e[33;76H->\e[33;79Hfeature/demo\e[33;92H(forced\e[33;100Hupdate)\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l\e[?25l" + - delay: 9 + content: "\e[?25l\e[15;21H\e(B\e[m\e[32m\e]8;;\e\\✓\e(B\e[m\e]8;;\e\\ \e[16;2H\e(B\e[m\e[36m\e]8;;\e\\10s\e[?25l\e[?25l\e[16;21H\e(B\e[m\e]8;;\e\\ \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[1m\e]8;;\e\\new file mode 100644\e(B\e[m\e]8;;\e\\ \e[17;21H \e[17;33H \e[17;40H\e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[1m\e]8;;\e\\index 0000000..3566d0d\e[17;101H\e(B\e[m\e]8;;\e\\ \e[18;21H \e(B\e[m\e[30m\e]8;;\e\\││\e(B\e[m\e[1m\e]8;;\e\\--- /dev/null\e(B\e[m\e]8;;\e\\ \e[24;2H\e(B\e[m\e[33m\e]8;;\e\\ﰖ\e[24;4H470ea494\e[25;2Hﰖ\e[25;4Hb5af2bfe\e[26;2Hﰖ\e[26;4H8b012284\e[27;2Hﰖ\e[27;4H32e049e1\e[28;2Hﰖ\e[28;4H254146a1\e[29;2Hﰖ\e[29;4H1800c621\e[30;2H\e(B\e[m\e[93;44m\e[1m\e]8;;\e\\ﰖ\e[30;4H9b24c491\e[?25l\e[?25l\e[2;2H\e(B\e[m\e[32m\e]8;;\e\\✓\e(B\e[m\e]8;;\e\\ repo → \e(B\e[m\e[32m\e]8;;\e\\feature/demo\e(B\e[m\e]8;;\e\\ \e[23;1H\e(B\e[m\e[32m\e[1m\e]8;;\e\\┌─Commits \e(B\e[m\e]8;;\e\\- Reflog\e(B\e[m\e[32m\e[1m\e]8;;\e\\─────────────────────┐\e[24;1H│\e[24;40H▲\e[25;1H│\e[25;40H█\e[26;1H│\e[26;40H│\e[27;1H│\e[27;40H│\e[28;1H│\e[28;40H│\e[29;1H│\e[29;40H│\e[30;1H│\e[30;40H▼\e[31;1H└──────────────────────────────7 of 57─┘\e[?25l" + - delay: 10 + content: "\e[?25l\e[?25l" + - delay: 604 + content: "\e[?25l\e[35;16H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[?25l\e[?25l\e[35;1H\e(B\e[m\e[37m\e[1m\e]8;;\e\\ \e[35;6H \e[35;9H \e[?25l" + - delay: 2000 + content: "\e[?12l\e[?25h\e[39;49m\e(B\e[m\e[H\e[2J\e[?1049l\e[23;0;0t\e[?1l\e>\e[?1000l\e[?1002l\e[?1003l\e[?1006l\e[?2004l\e[?1004l"