greitt

Log in

Recent Changes

This project is developed with AI assistance. Each feature shows the AI/Human contribution ratio:

April 2026

Cleaner Finalized Poll View

When a poll is finalized, the admin page is now more focused:

Decisions: 20/80 · Code: 95/5 · App size: +20 lines

Most-Voted Dates Highlighted

Before finalizing, date columns with the most votes are now highlighted in the results table, making it easier to pick the best date.

Decisions: 30/70 · Code: 90/10 · App size: +30 lines

January 2026

Improved Help & Navigation

Several small improvements to help users find their way around:

Decisions: 20/80 · Code: 90/10 · App size: +50 lines

Faster Startup & Better Monitoring

Infrastructure improvements for better performance and observability:

Decisions: 30/70 · Code: 85/15 · App size: +100 lines

December 2025

Log In Link for Visitors

Non-authenticated users now see a "Log in" link in the header. Clicking it takes you to a login page where you can verify your email to access your polls. For now, email is the only login method available.

Decisions: 20/80 · Code: 95/5 · App size: +50 lines

Account Icon with Log Out

Signed-in users now see a person icon in the header. Click it to see your email and a "Log out" link. Logging out clears your session and redirects you to the home page.

Decisions: 20/80 · Code: 95/5 · App size: +150 lines

My Polls: Both Admin and Participant Links

When you're both the creator and a participant of a poll, the My Polls page now shows links to both views. The main poll card links to the admin page as before, and a new "My Response" link in the corner takes you directly to your participant response. No more hunting for the right URL!

Decisions: 20/80 · Code: 95/5 · App size: +40 lines

Fourth Step in Admin Workflow

The admin progress indicator now includes a fourth step: "4. Finalize". This step becomes active when participants have voted, guiding you to choose a final date once everyone has responded. Completed when you finalize the poll.

Decisions: 30/70 · Code: 95/5 · App size: +30 lines

Delete Poll from Admin Page

You can now delete a poll directly from its admin page. A red "Delete Poll" button at the bottom of the page opens a confirmation dialog before deleting. After deletion, you're redirected to your My Polls list.

Decisions: 20/80 · Code: 90/10 · App size: +25 lines

Keyboard Shortcuts for Delete Confirmation

The delete confirmation dialog now responds to keyboard shortcuts: press Escape to cancel or Enter to confirm. Makes the delete workflow faster for keyboard users.

Decisions: 5/95 · Code: 95/5 · App size: +5 lines

Calendar Toast Visibility Fix

Fixed an issue where the "Saved" toast notification was being clipped by the calendar border. The toast now appears below the calendar where it's fully visible.

Decisions: 10/90 · Code: 95/5 · App size: +5 lines

Accessibility Improvements

Improved accessibility across all pages based on Lighthouse audit findings. Color contrast now meets WCAG standards (using darker shades for text), heading hierarchy follows proper order (h1 → h2 → h3), and all form inputs have proper labels for screen readers. Calendar day buttons now have aria-labels describing each date.

Decisions: 10/90 · Code: 95/5 · App size: +20 lines

Calendar Month Stays Put

Fixed an annoying bug where the calendar would jump back to the current month whenever you saved your name or the poll title. Now the calendar stays on whichever month you were viewing, so you can browse future months without interruption.

Decisions: 5/95 · Code: 95/5 · App size: +10 lines

Step Indicator Dynamic Updates

The admin progress steps now update in real-time as you make changes. Previously, the step indicator only showed the correct state on page load. Now when you add a title or select dates, the steps immediately reflect your progress without needing to refresh.

Decisions: 10/90 · Code: 90/10 · App size: +15 lines

Lazy Device Creation

Cookies are now only set when you actually interact with greitt (create a poll or vote). Just browsing the landing page or viewing polls won't store anything on your device. Better privacy by default.

Decisions: 20/80 · Code: 90/10 · App size: +30 lines

Static Asset Caching

Images, CSS, and JavaScript files are now cached in your browser for 1 hour. Pages load faster on repeat visits.

Decisions: 10/90 · Code: 95/5 · App size: +10 lines

Visual Progress Steps

The admin page now shows your progress with color-coded steps: "1. Name your poll → 2. Pick dates → 3. Share". Completed steps turn green with a checkmark, the current step is highlighted, and pending steps are grayed out. As you work through setting up your poll, the indicator updates automatically to show what's done and what's next.

Decisions: 30/70 · Code: 85/15 · App size: +75 lines

Enter Key Support for Text Fields

You can now press Enter to save changes in text input fields (poll title and participant name). No need to click the Save button - just type and press Enter for faster workflow.

Decisions: 5/95 · Code: 95/5 · App size: +15 lines

Calendar Overlay UX Improvement

When the calendar is disabled (before entering poll title or participant name), the overlay message now appears on top of the calendar instead of pushing it down. This prevents jarring layout shifts and makes the disabled state clearer. The overlay text is also bolder for better readability.

Decisions: 15/85 · Code: 95/5 · App size: +10 lines

My Polls Email Verification Box

Users visiting the My Polls page without verification can now enter their email directly on the page. A clear verification box appears with instructions, making it easier to access your polls without navigating away.

Decisions: 10/90 · Code: 95/5 · App size: +25 lines

Name Your Poll First

New polls now start with an empty title instead of "New Poll". Before you can pick dates, you need to give your poll a name. The calendar shows a friendly prompt until you enter a title. This helps ensure your shared links have meaningful names that participants will recognize.

Decisions: 20/80 · Code: 90/10 · App size: +30 lines

Native Mobile Sharing

You can now share polls directly to messaging apps on mobile devices. When viewing a poll (as admin or participant), there's a new "Share" button that opens your phone's native share menu - letting you send the poll link via WhatsApp, Telegram, iMessage, email, or any other app. On desktop browsers without native sharing, the Share button is hidden and you continue using the Copy Link button. This makes it faster to invite participants on mobile.

Decisions: 10/90 · Code: 95/5 · App size: +60 lines

Clearer Post-Voting Instructions

After voting, participants now see clearer instructions about what happens next. The "What happens next?" section explains that the poll creator will review everyone's availability and let you know when a date is decided. This reduces uncertainty about the next steps in the process.

Decisions: 20/80 · Code: 95/5 · App size: +5 lines

Cleaner Name Input After Save

After you enter your name on the participant page, the Save Name button disappears. The name input stays visible so you can edit it later - changes auto-save when you click away or press Enter. This reduces visual clutter and makes it clearer that your name was saved.

Decisions: 5/95 · Code: 100/0 · App size: +10 lines

My Polls Card Layout

Poll cards on the My Polls page now have consistent widths. The delete icon is positioned inside the card (top-right corner) rather than in a separate column. This means non-admin poll cards look the same as admin cards.

Decisions: 10/90 · Code: 95/5 · App size: +5 lines

Robots.txt and Privacy Protection

Poll URLs are now protected from search engine indexing. The robots.txt file blocks all poll-specific paths, and poll pages include a noindex meta tag. AI training bots (GPTBot, CCBot, Claude, etc.) are blocked entirely to protect user data.

Decisions: 10/90 · Code: 95/5 · App size: +50 lines

Improved Form Styling

The Save Name button on the participant page is now full-width to match the input field above it, creating better visual alignment. Buttons that follow input fields now have proper spacing for a cleaner form appearance.

Decisions: 10/90 · Code: 95/5 · App size: +10 lines

Browse Dates Before Entering Name

Participants now see the calendar immediately when opening a poll link. You can browse all available dates before entering your name. The calendar is read-only until you provide your name, then you can click dates to vote. This lets you quickly see if any dates work before committing.

Decisions: 10/90 · Code: 95/5 · App size: +40 lines

Cleaner Admin Page Share Section

The admin page now has a cleaner share section that combines the admin notice with the share link. Instead of a separate warning banner, there's now a subtle warning below the share link: "Your current URL is the admin link — don't share it unless you want others to edit this poll." This reduces clutter while keeping the important distinction clear.

Decisions: 10/90 · Code: 90/10 · App size: -10 lines (removed separate admin notice)

Participant Cards in Admin Results

Participant responses on the admin page now display in styled cards with light gray backgrounds, subtle borders, and rounded corners. This provides better visual separation between participants and matches the card styling used on the My Polls page.

Decisions: 10/90 · Code: 95/5 · App size: +30 lines

Week Numbers in Calendar

The calendar now shows ISO week numbers on the left side. A "Wk" header appears above the week column, and each row shows the week number (1-53). This helps with "week 47" style scheduling common in European business contexts.

Decisions: 10/90 · Code: 95/5 · App size: +50 lines

Date Selection Shortcuts

Admins can now quickly select all weekdays, weekends, or all days in a month with one click. Shortcut buttons appear below the calendar grid with a "Select:" label. Clicking a shortcut toggles those dates - click again to deselect. Great for setting up recurring meetings!

Decisions: 30/70 · Code: 85/15 · App size: +80 lines

Share Button for Participants

Participants can now share the poll link with others directly from the calendar page. A "Share This Poll" section appears below the calendar with a copy-to-clipboard button. Share away!

Decisions: 10/90 · Code: 95/5 · App size: +20 lines (refactored to reuse admin share code)

Clickable Logo

The greitt logo in the header now links back to the home page.

Decisions: 0/100 · Code: 100/0 · App size: +5 lines

Landing Page

The home page now shows an informative landing page instead of immediately creating a poll. You'll see a brief explanation of what greitt does and a prominent "Create Poll" button. This reduces accidental poll creation and gives new users a better first impression.

Decisions: 20/80 · Code: 85/15 · App size: +40 lines

Shorter Share URLs

Poll share links are now shorter and cleaner. Instead of long UUID-based URLs, share links now use compact nanoid identifiers (e.g., /s/b0dP92eUH1cW). The short URL redirects to the full poll page.

Decisions: 30/70 · Code: 90/10 · App size: +60 lines

Remove Participant

Admins can now remove participants from a poll. A trash icon appears next to each participant in the results section. Clicking it shows a confirmation modal before removing the participant.

Decisions: 20/80 · Code: 95/5 · App size: +50 lines

Improved Delete Confirmation

Poll deletion now uses a custom styled modal instead of the browser's default confirmation dialog. The modal provides a cleaner experience with clear Cancel/Delete buttons.

Decisions: 20/80 · Code: 90/10 · App size: +100 lines

Multiple Admin Emails

Polls can now have multiple admin email addresses. Additional admins automatically receive notification when a verified user accesses the admin page.

Decisions: 30/70 · Code: 85/15 · App size: +80 lines

Autosave Feedback

When you make changes, you now get visual confirmation:

These visual cues confirm your changes were recorded without interrupting your workflow.

Decisions: 30/70 · Code: 80/20 · App size: +50 lines

Changes Page

View recent changes at /changes - this page! Markdown rendered to HTML using commonmark.

Decisions: 50/50 · Code: 90/10 · App size: +80 lines

Inactive Poll Expiration

Polls now automatically expire based on inactivity to keep the database clean:

Any activity (title changes, date selections, new votes) resets the clock.

Decisions: 20/80 · Code: 85/15 · App size: +200 lines

My Polls Improvements

Decisions: 30/70 · Code: 80/20 · App size: +100 lines

Participant Email Verification

Decisions: 25/75 · Code: 75/25 · App size: +150 lines

Abandoned Poll Cleanup

Polls that were created but never configured (no dates selected) are automatically deleted after 24 hours.

Decisions: 40/60 · Code: 90/10 · App size: +80 lines

Modern UI Design System

Decisions: 30/70 · Code: 70/30 · App size: +200 lines

Device-Based Authentication

Your device is now automatically recognized when you return to greitt. No need to enter your email every time - your polls and responses are linked to your browser. You can still verify your email to access your polls from other devices.

Decisions: 30/70 · Code: 85/15 · App size: +300 lines

Toast Notifications

Visual feedback when actions complete: a brief "Saved" message slides in and fades out after saving poll titles, names, or date selections. Helps confirm your changes without interrupting your workflow.

Decisions: 20/80 · Code: 90/10 · App size: +60 lines

June 2025

Modern Design Overhaul

Complete visual redesign with a new logo, modern styling, and cohesive color scheme. Admin and participant pages received updated layouts with improved card designs and better visual hierarchy.

Decisions: 30/70 · Code: 70/30 · App size: +400 lines

PostCSS Integration

Added runtime CSS processing using GraalJS and Webpack. CSS is now processed with PostCSS plugins for better browser compatibility and smaller file sizes. Later replaced with LightningCSS for better performance.

Decisions: 40/60 · Code: 80/20 · App size: +300 lines

Copy URL Button

Added a "Copy Link" button next to the share URL input field, making it easy to copy poll links to your clipboard with one click.

Decisions: 10/90 · Code: 95/5 · App size: +20 lines

Real-Time Title Updates

Poll titles now update in real-time using HTMX. As you type, the title is saved automatically without needing to click a button or refresh the page.

Decisions: 20/80 · Code: 85/15 · App size: +50 lines

Share Link for Participants

Participants can now see and share the poll link directly from the calendar page. A dedicated section shows the shareable URL with a copy button.

Decisions: 10/90 · Code: 90/10 · App size: +30 lines

Calendar Component Refactoring

The calendar rendering logic was restructured into separate, focused components. This improves code maintainability and makes it easier to add new calendar features.

Decisions: 50/50 · Code: 85/15 · App size: ~0 lines (refactor)

May 2025

Participant Date Selection Limit

Participants can now only select from dates that the admin has marked as available. The calendar clearly shows which dates are selectable and which are not.

Decisions: 20/80 · Code: 90/10 · App size: +40 lines

Admin Date Marking

Admins can click calendar dates to mark them as available for the poll. Selected dates are visually highlighted so you can see your selection at a glance.

Decisions: 20/80 · Code: 85/15 · App size: +60 lines

Controllable Clock for Testing

Tests now use a controllable clock, enabling reliable date-based testing without depending on the current system time.

Decisions: 40/60 · Code: 90/10 · App size: +80 lines

January 2025

Initial Release

greitt launches with core scheduling functionality:

Decisions: 60/40 · Code: 60/40 · App size: ~3000 lines

← Back to Home