TradeSoft, 2016 to now
Built it. Sold it. Bought it back. Rebuilt it.
TradeSoft is a peer-to-peer marketplace for the New Zealand airsoft community, on iOS, Android and the web. I launched it in 2016 as AirsoftTrader, after Facebook banned the sale of replica firearms and left the community with nowhere to trade, and sold it in 2022. It then sat largely unchanged, so when I left ThriveCart I bought it back and rebuilt it on an entirely new stack, in the direction I had wanted to take it originally. Every decision on it now is mine, and I have to live with all of them.
Legacy accounts carried across in the rebuild, with their trading history intact.
Traded between members in the first three months after relaunch, at no commission.
Monthly active users, around 1,000 of them signed in.
Somebody else’s policy change left a community with nowhere to trade.
In 2016 Facebook banned the sale of firearms, replica firearms and paintball markers. For airsoft in New Zealand that was the venue, and there was no central place to go instead. The platform I built to fill that gap ran for six years, reached over 100,000 page views a month, and sold in 2022.
Starting from something that already worked
I knew WordPress well by then, having built a lot of sites on it over the years, ThriveCart’s support knowledge base among them. So the first job was research rather than code: finding a classifieds platform solid enough to build a business on. That was ClassiPress, and it was a good foundation and nowhere near a finished product for this niche. I taught myself enough CSS and PHP to shape the theme around the community and the brand I wanted.
The product role, several years before the title
What the foundation did not cover, I specified. I hired a developer to build it, and everything around that was mine: scoping each feature, designing the flows and the interface, writing what were effectively the user stories and tickets he worked from, and testing all of it before it went out. I was doing product management several years before I knew that was the name for it, and the shape of the job has not changed since.
- Scoping and specification
- UX, UI and the tickets
- All of the testing
Then I sold the work back to the ecosystem
Those features were packaged as plugins and sold inside the ClassiPress ecosystem. I had built them because my own marketplace needed them, and it turned out plenty of other people running classifieds sites needed the same things. Recognising that a specific problem is a general one is most of what a roadmap is, and the market was willing to pay for the answer.
I had already decided to rebuild it. Buying it back is what made the rebuild worth doing.
The decision to build TradeSoft came first, and the chance to buy AirsoftTrader back came afterwards. That order matters, because it changed what the new platform was starting from.
What the old stack would not let me do
I had tried adding a directory and an events system to the original site. WordPress themes do not combine, so each of those had to live under its own domain, which is a workaround rather than a product. Rebuilding meant one platform carrying the marketplace, the clubs, the retailers and the game days together, plus the features I had spent six years wishing I could add and could not.
Three things that each needed their own domain on the old platform, now three tabs in one app.
Mobile first, because the traffic already was
65% of traffic to the old site was mobile, arriving at a desktop theme that had been persuaded to squeeze, with several parts of it that only really worked on a desktop. People reach for whichever device is already on them, and for most of this audience that has been a phone for years. Native apps rather than a responsive site was the obvious call, and it has proven out: over 80% of traffic now comes through the iOS and Android apps.
- 65% mobile before the rebuild
- Over 80% through the apps now
Buying the incumbent instead of competing with it
AirsoftTrader had not been kept up to date after I sold it, and nobody else had built anything better, so there was a window. What was worth buying was not the code, which I was replacing anyway, and not the traffic. It was ten years of accounts and trading history. In a peer-to-peer market with no escrow, that history is the trust. A buyer sends money to a stranger on the strength of what other people have said about them, and years of feedback is the difference between a seller who looks safe and one who looks like a risk. Buying it meant I never had to ask a community to walk away from a ten-year-old platform, and their history could come with them instead of everyone starting again at zero.
The hard part of a migration is deciding what not to bring.
Moving the data was the straightforward half, and it went without drama. Every interesting question was about what deserved to come across, what had to be relabelled on the way, and what the first login would feel like for someone who had not opened the old site in three years.
A dry run, then a sample, then staging
I stood up a local WordPress install and imported the old SQL database, so the AI agents I was working with could read the real schema rather than my description of it. We worked out the mapping between the two systems, ran it dry, ran it against a small sample, moved the whole thing into staging, and only then into production. Nothing reached production that had not already run correctly somewhere else twice.
- Mapped against the real schema
- Dry run, sample, staging, live
What came across, and what did not
Accounts, active listings, feedback, and the listing images, which were in the export and could be mapped onto the new listings and reattached to their owners. Drafts, sold and archived listings, and watchlists did not come, because nothing needed them. The old system never tied a piece of feedback to the transaction it came from, so a sold listing from 2019 was not evidence for anything. The feedback was the part that mattered, and it stood on its own.
Legacy feedback, labelled as exactly that
Feedback on the old platform sat against an account rather than against a trade, so there was no way to tell whether a rating had been left for someone buying or for someone selling. The new system records that, and the two are different signals: a reliable seller and a reliable buyer are not the same person. Rather than infer a direction the source data never held, every migrated rating came across marked as legacy feedback. A decade of reputation still counts, and it does not claim a precision it never had. The alternative was to guess, at scale, and make every old rating quietly a little bit wrong.
Around 9,000 accounts, 7,800 worth moving
The first scope was narrow: only accounts with something behind them, an active listing or feedback given or received. I widened it to everyone, minus the obvious fakes, by running the full list through an email validation service and dropping the throwaway and anonymous providers. That is the difference between the roughly 9,000 accounts on the old platform and the 7,800 that were worth carrying into the new one.
Claiming an account rather than being handed one
Passwords could not come across, so there was no version of this where people simply found themselves logged in. I made that the onboarding instead of apologising for it: register with the same email address, or run a password reset, and the account and its history attach themselves. Two different emails went out, one to people whose history was waiting for them and one to people whose was not, because those are two different conversations and sending one message to both would have got each of them wrong.
- Same email, or a password reset
- History attaches automatically
The migration created a new place to hide
A dormant account from 2018 suddenly becoming active is what a returning member looks like. It is also what somebody who has bought a credible-looking account with a decade of history looks like, and that account is worth buying precisely because of the trust I had just carried over. So historic dormant accounts that reactivate and start trading are monitored internally as part of ScamScan. The thing that made the migration worth doing is the thing that made it worth watching.
Free to list, no commission, and still a business.
Listing costs nothing and there is no commission on a sale. The revenue comes from everything around the listing instead, which is a harder model to run and the right one for this market.
Why there is no commission, on purpose
It was inherited from the original platform and kept deliberately. Niche communities are slow to move and quick to resent being charged for something that used to be free, and New Zealand’s dominant auction site had recently dropped its own listing fees. Free was therefore the floor rather than the advantage. A commission would have handed the community the one argument that reliably moves people somewhere else, which is that it costs less over there. I would rather earn the money from sellers who are choosing to spend it.
What people do pay for
Optional improvements to a listing: making it stand out in the feed, putting it at the top, and bump credits people buy to lift something back up when it has drifted down. Businesses take a subscription for commercial listings, and there is an advertising system with packages running across the platform’s surfaces at different levels of exposure. Everything on that list is bought by someone who has already decided they want more than the free version does.
- Feature and promote a listing
- Bump credits
- Commercial subscriptions and advertising
Still looking for the next one
I keep looking for revenue that does not come from charging to list, and the bar for all of it is the same: it has to be worth paying for in its own right, rather than a toll on getting started. What TradeSoft offers a seller is not reach, it is the right audience. A smaller, specific market where everyone browsing already wants the sort of thing being sold will convert better than a general one, and that is the advantage any new revenue idea has to strengthen rather than spend.
You cannot promise a safe trade. You can make a bad actor’s job expensive.
ScamScan is the name for a set of anti-fraud systems and the internal monitoring around them. It is the part of this product I am most pleased with, and the part with the clearest limits.
Patterns, rather than waiting for reports
The systems watch behaviour, device and identity signals, and the same details turning up across more than one account. The aim is to stop the first attempt, and to keep enough of a trace from anyone who does get through the door that their next attempt is recognised as theirs before it reaches a member. The clearest result so far: a persistent scammer whose third attempt was suspended automatically, along with the accounts connected to it, before a single listing went live.
Images, checked by the platform and by the buyer
A Google Vision integration scans uploaded images automatically and either flags them for review or raises a warning where a member will see it. Beyond that, members can run an image through other reverse image search services themselves. A stolen product photo is the most common tell in this market, and the person about to send money to a stranger is the one with the most reason to look properly.
Registration happens in the apps, and only there
You can only create an account through the iOS or Android app, and both are region locked. That costs some sign-ups, and I decided it was worth it. The same friction that mildly annoys a genuine new member is a real obstacle to somebody creating accounts in volume from the other side of the world.
Trust the platform cannot supply itself
Club verification, phone verification, and a rank built from real activity in the community and the marketplace. I can tell you an account is old. I cannot tell you its owner turns up and behaves themselves, and the club they play with every weekend can. The useful trust signals in a community market are the ones the community issues.
- Club verification
- Phone verification
- Rank earned through activity
What it does not do
None of this guarantees a safe transaction, and the platform does not verify items. That is published on TradeSoft itself rather than buried in terms, because a safety feature that people trust further than it deserves is worse than no safety feature at all.
Clubs are the part I got wrong.
Club verification is the strongest trust signal on the platform. The first version of it barely moved, and both reasons were mine.
A separate area, with a separate login
I built clubs their own section of the platform, with its own sign-in. What they wanted was the same functionality inside the account they already used every day for their own buying and selling. Asking a volunteer committee to keep hold of a second set of credentials, in order to do a job whose benefit lands on somebody else, is most of the problem in a single design decision.
And I assumed they would want it
Vouching for your own members looked like a straightforward yes to me. It is their community, the self-regulation is in their interest, and it costs nothing. Some clubs did not want the extra administration. Some did not reply at all. Being obviously right about the value of something is not the same as it being worth somebody’s Tuesday evening.
So I changed who was doing the asking
Instead of pushing harder at committees, I went to the members. Welcome emails now lead with club verification and tell new members to ask their club for it, and unverified members get periodic reminders carrying the argument that actually persuades: club-verified members sell for more, and closer to what they asked, than members who are not. A player asking their own club for representation is a far harder request to leave unanswered than another email from a platform.
Then I took the administration away
Club management moved into the mobile app. A club manager can now invite a TradeSoft member in a couple of taps while standing on the field at a game, with the person in front of them, instead of coming home to a queue of requests from people whose faces they can no longer place. More than half the clubs in the country now verify their members. The idea was always right. It needed to cost them thirty seconds in a place they were already standing.
- Invite from the field, in the app
- Members ask their own clubs
The second login, deleted. A manager now finds their club in the same menu as their own payment details and bump credits.
The thing itself.
Everything above is a decision. This is what the decisions turned into, running on the App Store and Google Play today.
That is TradeSoft. ThriveCart is the other half.
TradeSoft is the product where every call was mine, and where a bad one shows up in my own support inbox. ThriveCart is ten years of the same thinking inside somebody else’s platform, at four people and at two hundred.
There is more detail behind all of this than belongs on a page. Ask me about any of it.