Skip to content

About

πŸ’Ό EspoCRM πŸš€ Countdown adds simple countdown timers to EspoCRM, packaged as an extension. It adds one record type β€” **Counters** β€” plus a **Countdown** page on which every counter runs down live in days, hours, minutes and seconds.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

EspoCRM Countdown

Tip

Feature requests and bug reports are welcome via GitHub Issues and will be reviewed within 1–3 weeks.

Warning

⚠️ CAUTION: This repository contains code developed with the assistance of Artificial Intelligence (AI). While functional, AI-generated code can introduce hidden bugs, security vulnerabilities, or logic flaws that may not be immediately apparent. Please thoroughly review, audit, and test all files in an isolated development environment before deployment, as this software is provided as-is and used entirely at your own risk.

πŸš€ Introduction

EspoCRM Countdown adds simple countdown timers to EspoCRM, packaged as an extension. It adds one record type β€” Counters β€” plus a Countdown page on which every counter runs down live in days, hours, minutes and seconds.

A counter is nothing more than a name, a date and time, and an optional note. Holidays, deadlines, launches, birthdays, contract renewals: add one, and the page shows how long is left, featuring the next one due at the top and collecting the reached ones underneath.

Everything is computed in the browser from the ordinary record API. There is no chart library, no CDN, no external request, and no activity stream on the counters. The extension installs like any other EspoCRM extension package, registers its own navigation group, and removes it again cleanly on uninstall.


πŸ”₯ Features

A deliberately small feature set: create a counter, watch it run down, and know at a glance what comes next.

⏳ Counters

A Counter record has a name, a date and time to count down to, and a free-text description for notes like flight numbers or meeting rooms. Counters are ordinary EspoCRM records, so they work with the list view, search filters, mass update, import, roles and the Entity Manager like any other entity.

πŸ•’ Live Countdown Page

The Countdown page shows every counter as a card with four boxes for days, hours, minutes and seconds, ticking once per second. One timer drives all cards, re-aligned to the wall clock on every tick, so all counters flip together and never drift. Only the digits that actually changed are rewritten. Seconds are rounded up, so a counter reads zero exactly at its target moment, not one second early.

🎯 Next Up

The counter due soonest is featured across the full width with large digits, the rest follow in a responsive grid sorted by target date. A thin progress bar on every card shows how much of the waiting time since the counter was created has already passed.

βœ… Reached Counters

When a counter hits zero while the page is open, it flips in place: the card turns green, shows a Reached badge and pulses briefly, without the board re-sorting under your eyes. On the next refresh it moves to the Reached section, which lists the twelve most recent ones with a note like "3 days ago" and links to the full list for the rest.

🚦 Urgency Colours

Each card carries an accent that follows the time left: blue while more than a week remains, amber within the last seven days, red within the last 24 hours, and green once reached. The accent updates live as a counter crosses a threshold.

✏️ Add, Edit and Remove in Place

Add Counter and the pencil icon on each card open EspoCRM's quick-create and quick-edit dialogs right on the page, and the board refreshes as soon as you save. The trash icon removes a counter after a confirmation. Ctrl-click on Add Counter or the pencil still opens the full form in a new tab. Buttons are only shown to users whose role allows the action.

🎨 Theme & Locale Aware

All colours derive from currentColor and translucent greys, so the page follows whichever Espo theme is active, light or dark. Target dates are formatted with Intl.DateTimeFormat in the user's language, in the user's EspoCRM time zone and with their 12- or 24-hour preference, so a card shows the same time as the record itself. Digits use tabular figures and long day counts shrink to fit their box. The layout works down to phone width, and animations are switched off for users who prefer reduced motion.

🌍 Translations

The extension ships with full en_US and de_DE translations for the entity, its fields, tooltips, and all page labels, including singular and plural unit names.

πŸ”’ Privacy by Design

The page issues nothing but ordinary authenticated record API calls against your own EspoCRM instance. There are no CDN references, no web fonts, no analytics, and no telemetry. The stream is disabled on the entity type, so no counter activity is written to the audit stream.


πŸ—’οΈ Requirements

The extension runs inside an existing EspoCRM installation and adds no dependencies of its own.

Requirement Value
EspoCRM 8.0.0 or newer
PHP 8.1 or newer
Modern Browser (Chrome, Firefox, Edge, Safari) Required
JavaScript enabled Required
Composer / npm dependencies None
Internet connection at runtime Not required

The countdown runs against the clock of the device viewing the page. If that clock is off, the counters are off by the same amount.


πŸ› οΈ Usage

πŸ“¦ Extension Package (Recommended)

Download the latest Countdown-x.y.z.zip from the _releases/ folder or from the GitHub Releases page, then in EspoCRM go to Administration β†’ Extensions, upload the ZIP, and confirm the installation.

The installer adds a Countdown navigation group containing the Countdown page and the Counters list. Uninstalling removes those entries again and drops the group if it ends up empty.

🧱 Manual Installation

Copy the contents of _source/files/ over your EspoCRM root, so that custom/Espo/Modules/Countdown/ and client/custom/modules/countdown/ land in place. Then run:

php rebuild.php

Add CountdownDashboard and CountdownEntry to the tab list manually under Administration β†’ User Interface, and grant access to the scope under Administration β†’ Roles.

▢️ First Steps

  1. Open the Countdown tab and use Add Counter on the empty state.
  2. Give the counter a name, pick the date and time, and save.
  3. Watch it run down on the page, featured at the top if it is the next one due.
  4. Use the pencil icon to move a counter, or the trash icon to remove it.
  5. Use Refresh after editing counters elsewhere, for example in the list view.

🎚️ Adjusting the Colour Thresholds

The thresholds for the urgency colours, and how many reached counters the page lists, are plain constants at the top of _source/files/client/custom/modules/countdown/src/views/dashboard/index.js.

Step 1 β€” Change the constants

/** Below this many seconds left, a counter turns amber, then red. */
const SOON_SECONDS = 7 * Util.SECONDS_PER_DAY;
const NEAR_SECONDS = Util.SECONDS_PER_DAY;

const REACHED_LIMIT = 12;

For example, const SOON_SECONDS = 30 * Util.SECONDS_PER_DAY; turns counters amber a month ahead. The colours themselves are the COLOR_FAR, COLOR_SOON, COLOR_NEAR and COLOR_DONE constants just above.

Step 2 β€” Deploy

Copy the changed file to client/custom/modules/countdown/src/views/dashboard/index.js in your EspoCRM installation, or rebuild the extension package from _source/, then clear the cache under Administration β†’ Clear Cache and reload the browser.


πŸ“ Repository Structure

Path Description
.git/ Internal file, can be ignored.
.github/ Internal file, can be ignored.
_changelogs/ HTML changelogs per released version.
_licenses/ Licenses of third-party components.
_releases/ Built extension packages, ready to upload to EspoCRM.
_source/ Extension source: manifest, install scripts, and the files/ tree.
_source/files/custom/ Server side β€” controller, metadata, layouts, and translations.
_source/files/client/ Client side β€” countdown page view, helpers, controller, and template.
README.md This readme file.
CHANGELOG.md Changelog overview.
LICENSE.md License file.
THIRD-PARTY-LICENSES.md Third-party components and their licenses.

πŸ’¬ Support Channels

If you encounter any issues or have questions while using this software, feel free to contact us:


πŸ“’ Spread the Word

Help us grow by sharing this project with others! You can:

  • Tweet about it – Share your thoughts on Twitter/X and link us!
  • Post on LinkedIn – Let your professional network know about this project on LinkedIn.
  • Share on Reddit – Talk about it in relevant subreddits like r/espocrm or r/opensource.
  • Tell Your Community – Spread the word in Discord servers, Slack groups, and forums.

🌱 Contributing to the Project

Thank you for your interest in this project.

At this time, this repository is not open for external contributions. Please do not submit pull requests or patches.

  • Pull requests from external contributors are not accepted.
  • Any unsolicited pull requests will be closed without review.
  • All code in this repository is maintained by the project owner.
  • By design, no third‑party code will be merged into this project via GitHub.

If you encounter a bug or have an enhancement suggestion, please check the "Issues" section of our GitHub repository or visit our official website for guidance before beginning any work on it.


🀝 Community Guidelines

We're focused on developing innovative solutions and advancing technology. By being part of this, you contribute to our progress.

Positive guidelines include being kind, empathetic, and respectful in all interactions. It is important to engage thoughtfully and offer constructive, solution-oriented feedback. Fostering an environment of collaboration, support, and mutual respect is essential.

Unacceptable behaviors include harassment, hate speech, or offensive language. Personal attacks, discrimination, or any form of bullying are not tolerated. Sharing private or sensitive information without explicit consent is strictly prohibited.

Together, we can partner to achieve common goals by following guidelines designed to promote effective collaboration and positive teamwork.


πŸ›‘οΈ Security Policy

I take security seriously and appreciate responsible disclosure. If you discover a vulnerability, please follow these steps:

  • Do not report it via public GitHub issues or discussions. Instead, please contact the security@bugfish.eu email address directly.
  • Provide as much detail as possible, including a description of the issue, steps to reproduce it, and its potential impact.

I aim to acknowledge reports within 2–4 weeks and will update you on our progress once the issue is verified and addressed.

This software is provided as-is, without any guarantees of security, reliability, or fitness for any particular purpose. We do not take responsibility for any damage, data loss, security breaches, or other issues that may arise from using this software. By using this software, you agree that We are not liable for any direct, indirect, incidental, or consequential damages. Use it at your own risk.


πŸ“œ License Information

This extension is licensed under the GNU General Public License v3, matching EspoCRM, the platform it is built on. The full text can be found in the LICENSE.md file. Third-party components and their licenses are documented in _licenses/THIRD-PARTY-LICENSES.md.

🐟 Bugfish

About

πŸ’Ό EspoCRM πŸš€ Countdown adds simple countdown timers to EspoCRM, packaged as an extension. It adds one record type β€” **Counters** β€” plus a **Countdown** page on which every counter runs down live in days, hours, minutes and seconds.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages