Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ jobs:
' CHANGELOG.md > release-notes.md
# Fall back to a generic line if the changelog had no matching section.
if [ ! -s release-notes.md ]; then
echo "Firefly for Java by Example — release ${TAG_NAME}." > release-notes.md
echo "jafly by example — release ${TAG_NAME}." > release-notes.md
fi
echo "----- release-notes.md -----"
cat release-notes.md
Expand Down
15 changes: 14 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
# Changelog

All notable changes to *Firefly for Java by Example* are documented here.
All notable changes to *jafly by example* are documented here.
The project uses CalVer (`YY.MM.PATCH`). The `release.yml` workflow extracts the
section matching a `v*.*.*` tag as the GitHub Release notes.

## [Unreleased]

### Changed

- Adopt the shared Framework by Firefly identity for English and Spanish front and back covers.
- Introduce *jafly by example* as the collection title across both editions, with localized enterprise-architecture subtitles. Existing package identifiers and download filenames remain unchanged.
- Place PDF covers on full trim pages without running headers or page numbers.
- Include localized front and back cover documents in EPUB reading order, and retain chapter navigation.
- Include publisher metadata in both formats and rights metadata in EPUB.
- Replace the retired cover generator with canonical artwork validation and import.
- Apply the shared logo and palette to title pages, part dividers and chapter openers.
- Render localized chapter and prelude titles when the manuscript relies on manifest headings.

The technical manuscript and companion application are unchanged.

## [26.09.01] — 2026-09-24

### Fixed
Expand Down
54 changes: 49 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
# Firefly for Java by Example
# jafly by example

> *Reactive Microservices with Spring Boot, WebFlux & the Firefly Framework.*
<picture>
<source media="(prefers-color-scheme: dark)" srcset="art/brand/banner-dark.png"/>
<img src="art/brand/banner-light.png" alt="jafly by Firefly"/>
</picture>

The canonical, build-it-yourself guide to the **Java Firefly Framework** — a metaframework on top of Spring Boot (WebFlux · Project Reactor · R2DBC). You build one real application, a personal-loan origination service (**Lumen Lending**), from an empty folder to a secured, observable, event-driven, three-tier system — making every concept concrete before the next.
> *From Spring Boot to a connected enterprise architecture.*

The canonical, build-it-yourself guide to **jafly**, the Java member of **Framework by Firefly** — a metaframework on top of Spring Boot (WebFlux · Project Reactor · R2DBC). You build one real application, a personal-loan origination service (**Lumen Lending**), from an empty folder to a secured, observable, event-driven, three-tier system — making every concept concrete before the next.

Published by the **Firefly Software Foundation** under Apache-2.0, in **American English** and **Spain Spanish (es-ES)**.

Expand Down Expand Up @@ -38,13 +43,52 @@ mvn -f samples/lumen-lending/pom.xml verify
./build/.venv/bin/python build/verify_code.py manuscript-es samples/lumen-lending
```

## Cover and interior artwork

The English and Spanish manifests select separate front and back covers from
`art/`. PDF covers occupy the complete 7.5 × 9.25 inch trim page, without running
headers or page numbers. EPUB editions include localized cover and back-cover
documents at the beginning and end of the reading order, while retaining the
chapter navigation. The interior uses the approved jafly logo on title and part
pages, compact numbered chapter banners, and the shared paper, charcoal, amber
and gold palette. Chapter titles come from the localized manifests when the
manuscript does not supply a heading. Technical prose, diagram geometry, and
verbatim listings are preserved.

The shared **Framework by Firefly** brand kit owns the cover design. Validate the
checked-in outlined SVGs and 1500 × 1850 PNGs before rebuilding:

```bash
./build/.venv/bin/python build/gen_cover.py
# To import an updated canonical set:
./build/.venv/bin/python build/gen_cover.py --source /path/to/Framework-Brand-Kit/11-Books/java
```

On macOS, prefix these commands with
`DYLD_FALLBACK_LIBRARY_PATH="$(brew --prefix)/lib"` if Cairo is not already on the
loader path. The tool validates all four covers before copying them, and can
rasterize missing PNGs from their outlined SVGs. It does not generate a new cover
design. See [artwork provenance](art/BRAND-PROVENANCE.md) for ownership and print
boundaries.

## Releases

Built editions (EN + ES, EPUB + PDF) are attached to each [GitHub Release](../../releases) on a CalVer (`YY.MM.PATCH`) tag. The release workflow prepares a draft with all four files; publish the draft after reviewing the rendered editions.
The redesigned English and Spanish editions are published together as
[`books-2026.10.08`](https://github.com/fireflyframework/fireflyframework-java-book/releases/tag/books-2026.10.08):

| Edition | PDF | EPUB |
| --- | --- | --- |
| English | [Download PDF](https://github.com/fireflyframework/fireflyframework-java-book/releases/download/books-2026.10.08/firefly-java-by-example.pdf) | [Download EPUB](https://github.com/fireflyframework/fireflyframework-java-book/releases/download/books-2026.10.08/firefly-java-by-example.epub) |
| Español | [Descargar PDF](https://github.com/fireflyframework/fireflyframework-java-book/releases/download/books-2026.10.08/firefly-java-by-example-es.pdf) | [Descargar EPUB](https://github.com/fireflyframework/fireflyframework-java-book/releases/download/books-2026.10.08/firefly-java-by-example-es.epub) |

Book-only editions use a `books-YYYY.MM.DD` tag. The existing CalVer
(`vYY.MM.PATCH`) workflow remains available for subsequent technical editions.

## Scope

This book is about the **Java** Firefly Framework only. The Python (PyFly), Rust, Go, and .NET ports, the Python agentic metaframework, the `agentic-bridge`, and the frontend frameworks are parallel projects and are **not** covered here.
This book covers **jafly**, the Java family. The pyfly, larafly, rsfly and netfly
frameworks, Firefly Agentic, the `agentic-bridge` and frontend projects have their
own documentation and are outside this book's scope.

---

Expand Down
43 changes: 43 additions & 0 deletions art/BRAND-PROVENANCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Book cover provenance

Both language editions use the collection title **jafly by example**. Runtime
package identifiers and the existing download filenames remain unchanged.

The canonical source is the private Framework by Firefly digital brand kit,
`Framework-Brand-Kit/11-Books/java/`. The assets use its product-first A2 identity
with the official Firefly endorsement and outlined Manrope typography. The cover
artwork requires no installed fonts. The interior uses the same paper, charcoal,
amber and accessible gold palette, retaining the existing reading and code fonts.

| Edition | Front | Back |
| --- | --- | --- |
| English | `cover.svg`, `cover.png` | `back-cover.svg`, `back-cover.png` |
| Spanish | `cover-es.svg`, `cover-es.png` | `back-cover-es.svg`, `back-cover-es.png` |

All canvases are 1500 × 1850 units/pixels, matching the book's 7.5 × 9.25 inch trim
at 200 pixels per inch. These are individual digital cover faces, not a printer's
wraparound jacket: no bleed, binding allowance, barcode, or production spine is
implied. The brand kit's separate web spine is not part of the PDF or EPUB.

Use `build/gen_cover.py --source /path/to/Framework-Brand-Kit/11-Books/java` to
import an approved revision, then rebuild and visually review both editions.
Running the tool without `--source` validates the checked-in art and rasterizes
missing PNGs. It refuses missing SVGs, wrong dimensions, or live text.

Firefly Software Foundation remains the book's author and publisher. The book's
Apache-2.0 license and existing attribution remain in force; the brand identity
does not change the technical content or imply additional trademark rights.

## Interior identity

`art/brand/` contains exact approved logo and banner exports from
`Framework-Brand-Kit/12-Frameworks/java/`, including the gradient final y.
The light logo appears on title and part-divider pages; the dark logo is embedded
without redrawing it in the 24 compact numbered chapter openers. Regenerate those
with `build/.venv/bin/python build/gen_openers.py` after importing approved logos.
The same opener assets are used by both languages; chapter numbers are decorative
and the localized chapter headings remain the accessible document titles.

The existing code-anatomy figure and concept-preview generator receive palette
changes only. Their geometry and technical text are preserved. Syntax colors and
warning colors retain semantic distinctions.
Binary file added art/back-cover-es.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions art/back-cover-es.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added art/back-cover.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions art/back-cover.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added art/brand/banner-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions art/brand/banner-dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added art/brand/banner-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions art/brand/banner-light.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added art/brand/logo-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions art/brand/logo-dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added art/brand/logo-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions art/brand/logo-light.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added art/cover-es.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions art/cover-es.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified art/cover.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading