Skip to main content
All changelog entries
Changelog 4 min read

A public changelog, a clearer wallet and more accurate error messages

Every product change now has a home on this page, the wallet has a plain currency converter, and error messages tell you what actually happened.

If you hire across borders, you depend on a product the way you depend on a bank or a payroll provider. Something changes quietly on a Tuesday, and on Wednesday a payment screen reads differently or a button has moved. Founders and freelancers who work in more than one country, one currency and one timezone cannot afford to find out about those changes by accident. They need a record they can read, share and subscribe to.

This release is mostly about that record, and about two places where plain language matters most: how the wallet describes currency, and what we tell you when something cannot be found. Both are the kind of detail that decides whether you trust a product with a contract and with money.

A changelog you can cite and subscribe to

Every product change now lives on the changelog, newest first. Each entry also has its own address, so you can send a client or a teammate to one specific update rather than a long page. The summary on the changelog is deliberately short, and the article you are reading is the longer version.

Three technical choices sit behind it, and each one is about being found and quoted correctly.

  • Pages are built when you ask for them. The changelog, each entry and the feed are produced on our servers for every request, not captured once and reused. A copy frozen at build time can only ever be as fresh as the last build. Building on request means a new entry is visible as soon as it is published.
  • Every page says what it is. Each entry carries a canonical address, which tells search engines which URL is the real one, and Open Graph metadata, the small set of tags that chat tools and social sites read to draw a preview card with a title, a description and a date. Share an entry and it arrives with a readable preview, not a bare link.
  • There is a standard feed. The RSS feed follows RSS 2.0, the long-standing format that feed readers and chat integrations understand. Each item uses the entry's permanent address as its identifier, so a reader will not show the same update twice if you subscribe from two places.

Changelog entries do not roll off the page. News posts are time-limited, because they are announcements. A changelog is a record, and a record that forgets is not much use.

A page for every post

The same page now serves every news post and every changelog entry. Addresses are short, lowercase names derived from the title, and each one is unique, so two entries can never collide. If you follow a link to something that does not exist, you get a page that says so and is labelled as not found, rather than a blank screen or a different post.

The page also links back to where you came from, the changelog or the news list, so a shared link never becomes a dead end.

A converter that estimates and does not transact

The currency tool in your wallet is now a plain converter. Choose a currency to convert from, a currency to convert to, and an amount, then ask for a quote. It supports US dollars, naira, cedis, Kenyan shillings and rand. The result is shown as an indicative quote: a rate and a converted amount.

The label under it is the important part. The quote is for reference only. Your wallet holds US dollars, contracts are written in US dollars, and conversion into or out of another currency happens at the moment you fund the wallet or withdraw. The converter helps you estimate what an amount is worth before you decide to move money. It does not move any.

We chose this design for a reason that is easy to miss. If balances were held in several currencies, every escrow, every milestone and every refund would carry exchange-rate movement along with it, and two people looking at the same contract could see different numbers. Holding one ledger currency and converting only at the edges, where money actually enters or leaves, keeps the contract amount and the escrow amount identical for both sides for the life of the engagement. Talent still see their balance in their own currency, calculated from a reference rate, while the underlying figure stays fixed.

Two edge cases are worth stating. First, a quote is a snapshot. Rates move, so the figure at the moment you fund or withdraw can differ from the figure you were quoted earlier. Second, your balances and transaction history are unchanged by this release. What we charge on a transaction is a separate question, and the answer is on the pricing page.

Errors that say what actually happened

When you open a project, a contract or a session that does not exist, you now see a clear message that it could not be found. Behind it is a habit we apply across the platform: each kind of problem is reported as its own kind of problem, using the standard meanings that web browsers and tools already share.

  • Not found means the thing you asked for does not exist. Check the link.
  • Forbidden means it exists but belongs to someone else. Sign in to another account.
  • Sign-in required means we do not know who you are. Sign in again.
  • Conflict means the action is not allowed in the current state, for example moving a contract to a stage it cannot reach from where it is.
  • Payment required means the action needs a plan or a build credit.

These are different instructions to a person. If every failure reads as a general error, you retry, refresh and write to support, when the real answer was that you were signed in to the wrong account.

There is one deliberate exception. When something unexpected goes wrong on our side, we show a generic message and keep the technical detail out of your view. A specific message is only useful when it is true and safe to show.

What this means for you

You can follow what changes in Afren from a page, a link or a feed, and quote any single update to a client. The wallet converter tells you what an amount is roughly worth without pretending to be a transaction. When something cannot be found, the message now tells you which kind of problem you have.