## Summary Preview buzz-app's Tabler icon style in the mobile app, replacing app-drawn Lucide glyphs across channels, messages, activity, search, and settings. A shared `BuzzIcons` mapping uses the bundled Tabler 3.46.0 outline font, matching buzz-app's version, with its MIT license and source documented. Native UIKit controls retain SF Symbols. The former 300/500 navigation glyphs use Tabler's standard outline; existing selection colors and labels remain. ### Related issue No matching Tabler mobile migration issue or PR found. Related native iOS controls: #8055. ### Testing - Pre-push mobile analysis, formatting, file-size checks, and the full mobile test suite passed. - 194 focused widget tests passed, including channels, home, search, settings, and message content. - Light and dark community-settings renders inspected. - Signed iPhone Release build succeeded; installed and launched as Buzz Tabler on a physical iPhone. - Full `just ci` attempted; stopped during Rust clippy compilation because the Mac ran low on disk space. Full repository validation is not claimed. Signed-off-by: kenny lopez <klopez4212@gmail.com>
Inter heart and warning fallback
The two Inter 4.001 variable fonts are derived from the previously bundled
fonts by removing only U+2764 and U+26A0 from their Unicode character maps.
Flutter can then choose a native font for heart and warning characters,
including emoji presentation
in reactions and message text. No glyphs, language coverage, other symbols,
font metrics, or variation tables are removed. The license remains in
Inter-LICENSE.txt.
To reproduce from the repository root:
mkdir -p /tmp/buzz-inter-source
for font in InterVariable.ttf InterVariable-Italic.ttf; do
git show ec7ea38f62ea917f15e85a678bc94f3bbee5bb64:mobile/assets/fonts/$font > /tmp/buzz-inter-source/$font
done
python3 -m venv /tmp/buzz-inter-tools
/tmp/buzz-inter-tools/bin/pip install fonttools==4.60.1
/tmp/buzz-inter-tools/bin/python mobile/scripts/prepare-inter.py /tmp/buzz-inter-source
/tmp/buzz-inter-tools/bin/python mobile/scripts/prepare-inter.py /tmp/buzz-inter-source --check
The script checks pristine source hashes and verifies every character mapping
and every other font table. Only the cmap table and the font checksum may
change. Repeated generation from the same sources produces identical bytes.
©, ®, ™, arrows, math symbols, accents, and supported languages
keep their original Inter mappings.
Use test/visual/heart_sim_app.dart on an actual iOS simulator to compare
reactions, plain/emoji/text-presentation hearts, bold/italic message text,
warning signs, and preserved symbols. Font fallback for plain and explicit
text-presentation hearts and warnings is platform-dependent; do not infer their appearance
from a macOS widget-test renderer. On iOS 26.5, all three heart and warning
presentations fall back to the color emoji, including explicit VS15. Message line metrics
can change with the fallback font.
The native screenshot regression check (requires Pillow) covers both reaction states, each heart and warning presentation, bold/italic text, and unchanged symbols:
python3 mobile/test/visual/verify_heart_screenshots.py before.png after.png
Use original 1206×2622 captures from the documented simulator and fixture for this check. PR images may be cropped afterward for readability.
test/shared/fonts/inter_assets_test.dart pins the verified generated font
artifacts in the existing Flutter test lane. Restoring either original font or
changing any other font data fails CI. When upgrading Inter, verify the
transformation and native rendering before updating the expected digests.
Tabler mobile preview
TablerIcons.ttf is the unmodified outline webfont from
@tabler/icons-webfont@3.46.0, matching buzz-app's Tabler dependency version.
Source: https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@3.46.0/dist/fonts/tabler-icons.ttf
The upstream MIT license is bundled in TablerIcons-LICENSE.txt.
lib/shared/theme/buzz_icons.dart maps the existing mobile semantic names to
Tabler glyphs using the package's dist/tabler-icons.css codepoints. Native
UIKit controls retain SF Symbols. Lucide's 300/500 navigation weight variants
both map to Tabler's standard outline; selection still uses the existing color
and label treatment.