Releases
v0.1.0
Compare
Sorry, something went wrong.
No results found
Immutable
release. Only release title and notes can be modified.
0.1.0 (2026-11-02)
Features
api: keep the code and the wait time of an API error (1dbc9bb )
api: send the X-Requested-With header on every request that changes data (7274549 )
api: send the X-Requested-With header on every request that changes data (#52 ) (fa112f1 )
app: add Storybook with the accessibility add-on (e6a1f0f )
app: add the Alat list, device detail and rename screens (c256fcb )
app: add the Alat list, the detail of a device and the form to rename it (0ac4d1f )
app: add the API client and the query client (5013f78 )
app: add the API client and the query client (30f3126 )
app: add the app shell, router and Rubik text styles (a0e8278 )
app: add the Beranda screen (d07c01c )
app: add the Beranda screen with its loading, error, empty, offline and collecting states (a09e796 )
app: add the data hooks of the home screen (fa12dd4 )
app: add the date picker, typing in the number stepper and the Produksi screen (3157bd3 )
app: add the device data hooks and the power formats (51932b0 )
app: add the Figma design tokens as CSS variables (e268aad )
app: add the Figma design tokens as CSS variables with Light and Dark themes (124d690 )
app: add the Lainnya menu and the Pengaturan screens (328f2cf )
app: add the Lainnya menu and the Pengaturan screens (efed0ca )
app: add the Laporan screen with the period, the savings and the PDF download (8b64801 )
app: add the Laporan screen with the savings, the period and the PDF download (5799a48 )
app: add the Masuk and Daftar screens with the forms disabled (6c1d22c )
app: add the Masuk and Daftar screens with the forms disabled until the login exists (3515444 )
app: add the number and date formats and the connection hook (1277a86 )
app: add the Produksi screen, the date picker and typing in the number stepper (3267750 )
app: add the Saran data hooks, the section card and the media query hook (9848d24 )
app: add the Saran list, the detail of a tip and the question before a record is removed (9b53d23 )
app: add the Saran screens (64ec405 )
app: add the Tambah alat steps from the kind of device to the search (f8b2b75 )
app: add the Tambah alat steps from the kind of device to the search (a2c73f6 )
app: add the text styles, the app shell and a not found page (e4af0df )
app: call the app WATTLINK in the titles, the menu and the sign-in screens (da08f27 )
app: call the app WATTLINK in the titles, the menu and the sign-in screens (#47 ) (66446f2 )
app: configure Storybook and add a story for the app (e15ba8f )
app: link the empty states and the lists to Tambah alat, Catat produksi and the tariff (4e875b5 )
app: link the empty states and the lists to Tambah alat, Catat produksi and the tariff setting (1266cbc )
app: load the Sentry SDK on demand and read the environment name from the build settings (6bbb584 )
app: report errors to Sentry and show an error page when a route throws (#44 ) (84ff8e1 )
app: scaffold the React app (a6e6564 )
app: scaffold the React app with Vite, Tailwind and Vitest (3933264 )
app: show a loading bar and a live note while the next page loads (d2dd48d )
app: show a loading bar while the next page loads (#40 ) (bd7feb9 )
app: show an error page when a route throws and report the error (ba7b5e4 )
app: tell a plug user to keep the machine under the rating of the plug (16807c1 )
app: tell a plug user to keep the machine under the rating of the plug (#39 ) (16ced7b )
auth: add forgot and reset password screens (#57 ) (7755e08 )
auth: add sign in, sign up and email verification screens (ce77e95 )
auth: add sign in, sign up and email verification screens (#55 ) (a14cb10 )
auth: add the screens to ask for a reset link and to set a new password (d63f999 )
auth: add the session query, sign out and the rule for a 401 (7d39d8b )
auth: guard the screens of the app and add sign out (#56 ) (828f32a )
auth: guard the screens of the app and add the Keluar screen (4a41cab )
docker: add the app image with nginx and check it in CI (b74fe9d )
docker: add the image with nginx, the web server config and a compose file (82cd83d )
hosting: add the Cloudflare Pages redirect and security headers (350106e )
ui: add the bar chart, the power chart and the forecast chart (f8d2c4a )
ui: add the basic components (1d9cc6b )
ui: add the button, tag, status dot, card, banner, list row and empty state components (710e9fa )
ui: add the chart components (41a7fc4 )
ui: add the form components (166f050 )
ui: add the page header, the recommendation card and the before and after block (27b04ea )
ui: add the text input, select, checkbox, segmented control and number stepper (e55f351 )
ui: let the recommendation card link to a detail and take its own buttons (a6554f5 )
Bug Fixes
api: word the header rule as the contract does and keep the comment under 120 characters (a947f0a )
app: add the Indonesian words of the backend device labels to the spell check (819f42e )
app: add the status words of the devices to the spelling words (983e524 )
app: allow the EU ingest host of Sentry in the content security policy (65b6f48 )
app: announce the stepper value, show the limit at once, wrap the sheet and keep one save at a time (113ed4a )
app: call the plug and the clamp WATTLINK Plug and WATTLINK Clamp (74dc350 )
app: call the plug and the clamp WATTLINK Plug and WATTLINK Clamp (#58 ) (6f402ba )
app: check that a downloaded report starts like a PDF (5a23868 )
app: check the asked month, stop a download that was left and refuse a file that is not a PDF (887013e )
app: check values in the token test, add color-scheme and two words for cspell (892a17a )
app: create the router once, move the focus after a navigation and list the menu items (6ddf732 )
app: delay the note, keep the delay for reduced motion and show the indicator on the auth screens (031ffa9 )
app: detect an abort by its name so that an error from another realm passes (62ac6df )
app: drop the null checks that the Node config does not need (5b7de9e )
app: focus the error page, offer plain links, ask for the connection and skip responses such as a 404 (e807f67 )
app: import the filter options again and type the matchMedia stub (d37cbce )
app: keep build and body errors out of the lost connection and skip a retry of a bad shape (73a56b9 )
app: keep real room under the floating button, put it last in the tab order and show Tambah alat once (baeac6c )
app: keep the Alat filter, wrap long names, link back from the banners and refocus after a failed save (df8df63 )
app: keep the filter when a tip opens, guard the cancel page and say when a decision fails (354a20a )
app: keep the matchMedia stub inside the window guard and wait for the loading state (380ec9f )
app: keep the product name link inside the menu landmark (6091d60 )
app: keep the production button on the wide Alat screen while a device is open (d46ffb9 )
app: keep the setup of the tests off the window in the node tests and drop the arrow key test that jsdom cannot run (71cc1af )
app: keep the spelling skips on one line and cover templates and JSX expressions (91b4287 )
app: keep the wizard context out of the layout file and read the request body as text in the test (2f29bfe )
app: link the auth notice to the disabled controls and the brand to the home page (020f6aa )
app: list the flag letters of the regular expression pattern as a word (b295a46 )
app: list the Storybook files by pattern so the linter finds them (e4ec508 )
app: move the pending hook out of the component file for fast refresh (cc8f2ff )
app: move the Saran filter helpers out of the view file and drop the deprecated media query listeners (fae3e0d )
app: name the tip in its buttons, read the day of the business, show 4 devices and keep the page within its width (459cb8e )
app: narrow the anomaly of the chart, move the Alat filter helpers and fix the Alat tests (8ae239d )
app: pass the telemetry flag in the Storybook scripts (dda7625 )
app: point the production API at aethera-api.syafahadyan.com (bcd01b8 )
app: point the production API at aethera-api.syafahadyan.com (5e58d1e )
app: read the last day of the Laporan month by the clock of the business (db7eef0 )
app: read the moments of the devices by the clock of the business (11ab8d0 )
app: read the tokens file in a Node test because Vitest does not return raw CSS (d397174 )
app: read today by the clock of the business in the Alat detail (decc820 )
app: refuse a decimal tariff, keep the default tariff on an unchanged save and wrap long row values (76255b5 )
app: replace the name step, keep the search on a failed poll and say when a new search fails (2895bdb )
app: report every error the route boundary shows, because a render error is never a response (602104b )
app: satisfy lint and the unit tests, and look for the heading that the Beranda page shows (f036e95 )
app: say when a decision fails, when the page opens offline and fit the charts to a narrow screen (07f98e6 )
app: send Kembali on the Produksi page to the home page until the Lainnya menu exists (698fb7b )
app: send Kembali on the Produksi page to the Lainnya menu that now exists (cb1d580 )
app: show the heading of Catat produksi when the records cannot load (22b32f7 )
app: skip escaped templates and regular expression literals and narrow the JSX text patterns (7083569 )
app: skip plain Indonesian text lines and add the Indonesian words to the spelling check (5170d48 )
app: skip the Indonesian screen text in code when checking the spelling (15997e0 )
app: skip the reload while offline, reload once a minute and leave other errors alone (0e268cc )
app: stub the ResizeObserver and the network before each test again (32ab07c )
app: turn off the data the Sentry SDK collects by default and keep its code in a chunk of its own (16f04fa )
app: turn off the Storybook telemetry and name the docgen plugin in the audit note (74d6868 )
app: type the form event of the edit screens and read the saved state without an any (29f16a5 )
app: use an interface and the error option in the env check (eeb0bf5 )
app: use an optional chain to compare the saved values with the screen (057fc28 )
app: use the narrowed anomaly in the legend and import the device filter options (4e1e69d )
app: use the product name in the plug consent text and the offline banner (ee74ed0 )
app: use the query method of the client in the connection test (eefd222 )
app: use the renamed staging API host in the CSP and the compose default (5820230 )
app: use the renamed staging API host in the CSP and the compose default (#43 ) (baaccfd )
app: wait for the digits below the minimum and confirm only the values that were saved (2a636c5 )
assert the median Lighthouse score of the three runs (28d4084 )
auth: clear the session from the hook and raise the all chunks limit to 260 kB (748bd25 )
auth: fix the spell check, the lazy route test, the e2e label match and the wait of a negative value (8b7d894 )
auth: keep the focus while a call runs and cover the cases that the review named (5caa007 )
auth: keep the sign out running after Batal and restart the session read on a 401 (0b18d30 )
auth: move the focus after the reset, confirm a resent link and drop the cached session (6b32c28 )
auth: read the open screens again after a reset instead of removing their queries (caeb7e3 )
auth: remount the screens when the session names another user (8abd9f6 )
auth: reset the queries of the first user and keep the fragment of the address (fe5499c )
auth: sign out in the right order and handle another user in the session, plus the review findings (6fde71c )
auth: treat every 429 of a resend as a wait and keep the retry button for a limited verification (ea119a0 )
ci: add the awk function toupper to the cspell words (4e8ee59 )
ci: add the release tags only after both SBOMs are attested (fcf0b4f )
ci: add the software dictionaries and the remaining names to cspell (c73157c )
ci: add the tags only after the signature is verified, attest an SBOM for each platform and refuse tags off main (bec50f6 )
ci: build the performance jobs with the placeholder API address and warn on a missing report (14d8a70 )
ci: correct a comment in the commit message workflow (fc40bd3 )
ci: count only tags on main for the floating tags and say what the tag check guards against (20733b0 )
ci: fail on every semicolon, spell check Dockerfiles and nginx files, correct the Vale docs (b93cf25 )
ci: keep pull request runs out of the mirror group and copy a tag only when its commit is on main (522e46b )
ci: list the names and the few Indonesian words for cspell (e225a1d )
ci: move a floating tag only for the newest release of its line (a6c6425 )
ci: sign the image before the scans and skip the major tag of a 0.x release (29e4d45 )
ci: spell check the hidden folders and list the two header terms (92d0a67 )
ci: stop the mirror plan when the tag lookup fails (db0a497 )
docker: accept the root user of the upgrade step in Hadolint (f184ffd )
docker: do not cache a missing asset as immutable and hide the headers file (47f545e )
docker: refresh the package upgrade layer every day instead of reusing the cache (75837dd )
docker: upgrade the Alpine packages that Trivy flags in the base image (2d2be7e )
docker: use the numeric id of root instead of a Hadolint ignore (932563a )
e2e: wait for the page to render and read ALL_DEVICES as exactly 1 (c1c4c53 )
hosting: drop _redirects because Pages already serves the single page app (96d046c )
lint: load the react-refresh config from its named export (3f69bd8 )
name Brotli as the compression of the size budget (0945162 )
test: drop the null checks that the regex match types make unnecessary (549fcbf )
ui: cap the digits of a step at the 100 that toFixed accepts (fb73b60 )
ui: do not accept a type on a button that renders its child (cef7436 )
ui: keep chart labels inside the chart, draw a one point anomaly and ignore bad values (d23d424 )
ui: keep Indonesian out of a comment of the decision buttons (8834586 )
ui: let a long value without spaces wrap inside the row (de370a6 )
ui: let the power chart draw past its edge so a dot on the last point is whole (ef9ebe8 )
ui: name each tip card as an article (6526383 )
ui: read the digits of a step that is written with an exponent (c18ef7d )
ui: show focus on an invalid field, announce errors, keep the digits of a step and let a select start with a value (92c40ef )
ui: step to the limit when a whole step does not fit and keep the digits of the value (bdad732 )
ui: style links like buttons, forbid disabled with asChild, drop aria-busy from the skeleton and pin the tag height (d9880d0 )
Performance Improvements
app: load each page as its own chunk (44e8563 )
app: load each page as its own chunk and reload once when a chunk is gone after a release (0e6f57c )
You can’t perform that action at this time.