Linetime

Line Time was a text-based pomodoro app I wrote. Write out your plan, fire off the timer, and get to work! Linetime automatically clears tasks off of your todo list, and sends you notifications reminding you to take a break or go to the next task.

We all know that to optimize our days, we need to plan them out ahead of time.

Calendars are great for appointments. But if you want to plan out deep work, like writing, programming, design, or editing a video, you don’t care about when things happen. You care about how much time you spend on each task, the order of those tasks, and how far you’ve gotten in your agenda.

First, I want to solve the basic problem of notes and schedules being disconnected. Then, I want to go further and help people feel a sense of progress.

Example:

[25 minutes] デザインの編集 🖋️
Email to everyone else
Make sure current date is in filename
[5 minutes] 休み😅
walk around for a little bit
[25 minutes] 昼ごはん、ストレッチ 🍲
[5 minutes] 休み
[25 minutes] 仕事、メール返事 ✉️
[30 minutes] Take a long break☕️☕️☕️

Architecture:

Redux + React

Components:

Hierarchy:
Note Container:
	Editor
		Header
		Chunks
			TimeChunk
				Interval
				TimePoint
				Task

containers/CurrentNote
components/Note
	components/ChunkList

containers/ActiveChunk
containers/Chunk

components/Interval

containers/TimeManager
	components/TimeController
		components/PlayPauseButton
		components/CountdownDisplay
			components/CountdownTime

Data

State: {
	currentNote: NoteId,
	Notes: {
		[id] : {
			chunks: [array of chunk Ids]
		}
	},
	Chunks: {
		[id] : {
			editorState: [draftjs EditorState],
			intervalContent: String,
			intervalSeconds: Float,
		}
	},
	currentChunk: [chunk id],
	timerSeconds: float,
	timerActive: boolean
}

Flow:

When you first open the app, there will be one note Inside of that note there will be one chunk. Every note has at least one chunk.

When you write an interval at the beginning of a line, with a space at the end, then a new chunk is created. If the current chunk is the first chunk then it simply gets an interval. If the current chunk is not the base chunk, a new chunk is created. The new chunk receives the interval and creates a new editor.

The first chunk with an interval in a new document is the active chunk. It has a “time controller” floating to its left(structurally, the modal is inside). The time-controller receives the current interval as input.

Notes