I usually prefer a feature/domain-based structure, with small layer-based folders inside each domain.
Instead of one global Services, Actions, or Contracts folder, I like keeping related code together:
app/
Domain/
Offers/
Actions/
States/
Contracts/
Listings/
Actions/
Services/
Contracts/
Billing/
Actions/
Services/
Contracts/
Http/
Controllers/
Offers/
Listings/
Billing/
Requests/
Offers/
Listings/
Billing/
That gives a good balance: the business logic is grouped by feature, but each feature still has clear separation between actions, services, contracts, states, etc.
A good public example of this style is:
github.com/alihamzahq/pulsepass-api
It follows a similar domain-style flow, with business logic grouped under app/Domain/ and HTTP concerns kept separately under app/Http/.
My general rule is: structure the app first by business capability, then by technical role inside that capability.