Tip
Feature requests and bug reports are welcome via GitHub Issues and will be reviewed within 1β3 weeks.
Warning
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.
A deliberately small feature set: create a counter, watch it run down, and know at a glance what comes next.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.phpAdd CountdownDashboard and CountdownEntry to the tab list manually under Administration β User Interface, and grant access to the scope under Administration β Roles.
- Open the Countdown tab and use Add Counter on the empty state.
- Give the counter a name, pick the date and time, and save.
- Watch it run down on the page, featured at the top if it is the next one due.
- Use the pencil icon to move a counter, or the trash icon to remove it.
- Use Refresh after editing counters elsewhere, for example in the list view.
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.
/** 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.
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.
| 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. |
If you encounter any issues or have questions while using this software, feel free to contact us:
- GitHub Issues is the main platform for reporting bugs, asking questions, or submitting feature requests: https://github.com/bugfishtm/espocrm-countdown/issues
- Discord Community is available for live discussions, support, and connecting with other users: Join us on Discord
- Email support is recommended only for urgent security-related issues: security@bugfish.eu
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.
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.
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.
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.
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