diff --git a/README.md b/README.md
index dd692f7..bfaafa7 100644
--- a/README.md
+++ b/README.md
@@ -1,248 +1,347 @@
-# Useful Python Utils
+
-[](https://github.com/WoLpH/python-utils/actions/workflows/ci.yml)
-[](https://coveralls.io/r/WoLpH/python-utils?branch=master)
+

-Python Utils is a collection of small Python functions and classes which make
-common patterns shorter and easier. It is by no means a complete collection but
-it has served me quite a bit in the past and I will keep extending it.
+# ⚡ Python Utils
-One of the libraries using Python Utils is Django Utils.
+**The fast, fully-typed stdlib helpers you keep rewriting — in one tiny, dependency-light package.**
-Documentation is available at: https://python-utils.readthedocs.io/en/latest/
+[](https://pypi.python.org/pypi/python-utils)
+[](https://pypi.python.org/pypi/python-utils)
+[](https://github.com/WoLpH/python-utils/actions/workflows/ci.yml)
+[](https://coveralls.io/github/WoLpH/python-utils?branch=develop)
+[](https://github.com/WoLpH/python-utils)
+[](https://github.com/astral-sh/ruff)
+[](https://github.com/WoLpH/python-utils/blob/develop/LICENSE)
+[](https://pypi.python.org/pypi/python-utils)
+
+[**Documentation**](https://python-utils.readthedocs.io/en/latest/) ·
+[**PyPI**](https://pypi.python.org/pypi/python-utils) ·
+[**Source**](https://github.com/WoLpH/python-utils) ·
+[**Issues**](https://github.com/WoLpH/python-utils/issues)
+
+
+
+---
+
+Python Utils is a collection of small, battle-tested functions and classes that
+make everyday Python patterns shorter, safer and faster. No sprawling framework,
+no heavy dependencies — just the helpers you find yourself re-writing in project
+after project, packaged once and typed to the hilt.
+
+It has powered production code for years (and is used by libraries such as
+[Django Utils](https://pypi.python.org/pypi/django-utils2) and
+[progressbar2](https://pypi.python.org/pypi/progressbar2)).
+
+## ✨ Highlights
+
+- 🪶 **Zero-cost imports** — thanks to [PEP 562][pep562] lazy loading, `import
+ python_utils` pulls in *nothing* until you actually touch a helper. No
+ `asyncio`, no `typing_extensions`, until you ask for them.
+- ⚡ **Async-native** — `acount`, `abatcher`, and timeout/stall detectors bring
+ `itertools`-style ergonomics to `async for`.
+- 📦 **Smart containers** — self-casting dicts, duplicate-proof lists and a
+ sliceable deque.
+- 🔢 **Forgiving converters** — pull an `int`/`float` out of *any* messy string,
+ scale bytes to KiB/MiB, remap values between ranges (with `Decimal` precision).
+- ⏱️ **Time & retries** — human-readable durations plus timeout generators for
+ sampling slow APIs without hanging.
+- 🎯 **Fully typed & 100% covered** — ships `py.typed`, passes **mypy**,
+ **basedpyright** *and* **pyrefly** in strict mode, with 100% test coverage.
+- 🐍 **Modern & tiny** — Python 3.10+, a single runtime dependency
+ (`typing_extensions`), BSD-3 licensed.
+
+## 🗺️ What's inside
+
+| Module | What you get |
+| --- | --- |
+| [`converters`](https://python-utils.readthedocs.io/en/latest/) | `to_int` · `to_float` · `to_str` · `to_unicode` · `scale_1024` · `remap` |
+| [`formatters`](https://python-utils.readthedocs.io/en/latest/) | `camel_to_underscore` · `apply_recursive` · `timesince` |
+| [`time`](https://python-utils.readthedocs.io/en/latest/) | `format_time` · `timeout_generator` · `aio_timeout_generator` · `aio_generator_timeout_detector` |
+| [`generators`](https://python-utils.readthedocs.io/en/latest/) | `batcher` · `abatcher` (batch by size **or** time interval) |
+| [`aio`](https://python-utils.readthedocs.io/en/latest/) | `acount` · `acontainer` — async `itertools` |
+| [`containers`](https://python-utils.readthedocs.io/en/latest/) | `CastedDict` · `LazyCastedDict` · `UniqueList` · `SliceableDeque` |
+| [`decorators`](https://python-utils.readthedocs.io/en/latest/) | `listify` · `set_attributes` · `sample` · `wraps_classmethod` |
+| [`logger`](https://python-utils.readthedocs.io/en/latest/) | `Logged` · `LoggerBase` (+ `Logurud` via the `loguru` extra) |
+| [`import_`](https://python-utils.readthedocs.io/en/latest/) | `import_global` — programmatic `from x import *` |
+| [`exceptions`](https://python-utils.readthedocs.io/en/latest/) | `raise_exception` · `reraise` |
+| [`terminal`](https://python-utils.readthedocs.io/en/latest/) | `get_terminal_size` — works in shells, IPython & Jupyter |
+| [`types`](https://python-utils.readthedocs.io/en/latest/) | handy type aliases (`Number`, `Scope`, `StringTypes`, …) |
+
+## 📦 Installation
-## Links
+```bash
+pip install python-utils
+```
-- The source: https://github.com/WoLpH/python-utils
-- Project page: https://pypi.python.org/pypi/python-utils
-- Reporting bugs: https://github.com/WoLpH/python-utils/issues
-- Documentation: https://python-utils.readthedocs.io/en/latest/
-- My blog: https://wol.ph/
+Optional extras:
-## Security contact information
+```bash
+pip install 'python-utils[loguru]' # loguru-backed logging mixin
+```
-To report a security vulnerability, please use the
-[Tidelift security contact](https://tidelift.com/security). Tidelift will
-coordinate the fix and disclosure.
+Python **3.10+** is required. The only runtime dependency is
+`typing_extensions` (and it's imported lazily).
-## Requirements for installing
+## 🚀 Quickstart
-Python 3.10 or higher is required. There are no other runtime requirements
-beyond `typing_extensions`, which is installed automatically.
+```python
+import python_utils
-## Installation
+# Pull a number out of any messy string
+python_utils.to_int('listening on port=8080', regexp=True) # 8080
-The package can be installed through `pip` (this is the recommended method):
+# Human-readable sizes: (value, power-of-1024)
+python_utils.scale_1024(1536, 2) # (1.5, 1) -> 1.5 KiB
-```bash
-pip install python-utils
-```
+# Remap a value between ranges (46% volume -> dB on an AVR)
+python_utils.remap(46.0, 0.0, 100.0, -80.0, 10.0) # -38.6
-Or download the latest release from
-[PyPI](https://pypi.python.org/pypi/python-utils) or
-[GitHub](https://github.com/WoLpH/python-utils).
+# "time ago" formatting, Django-style
+import datetime
+python_utils.timesince(datetime.datetime.now() - datetime.timedelta(seconds=61))
+# '1 minute and 1 second ago'
+```
-## Quickstart
+Everything is reachable straight off the top-level package (`python_utils.