We build quality apps at AI Speed
Brue is a product studio for polished software: SaaS products, mobile apps, macOS utilities, open-source tools, and courses built with the same quality bar.
Brue
All
FilterSortOptions
Apps
URL
Status
Platform
Category
Quality Bar
Key Feature
Stage
Availability
Live
Mobile web
Merchant loyalty
Simple, reliable merchant UX
Tap-to-join loyalty and receipts
Public waitlist
Live on web
In build
iOS
Mobile App
Tasteful personal styling
Closet scan and outfit planning
Private alpha
Preview page
Refine the Brue Buildroom around one standard: high-quality apps across SaaS, mobile, macOS, open source, and courses.
…my-twenty-app/src/constants/schema-identifiers.ts
+84-01export const SCHEMA_IDS = {
2 rocket: { object: '733956fd-…', fields: { launches: '5b877c2a-…' } },
3 launch: { object: 'e7f1e750-…', fields: { rocket: '42c9106f-…' } },
4 payload: { object: '16ffcc45-…', fields: { customer: 'd84468aa-…' } },
5 launchSite: { object: '2f18d525-…', fields: { launches: 'b94b7f00-…' } },
79 unmodified lines
…my-twenty-app/src/objects/launch.object.ts
+237-01import { defineObject, FieldType, RelationType } from 'twenty-sdk';
3export default defineObject({
4 nameSingular: 'launch',
5 labelSingular: 'Launch', labelPlural: 'Launches',
6 icon: 'IconRocket',
7 fields: [
8 { name: 'missionCode', type: FieldType.TEXT, isUnique: true },
9 { name: 'status', type: FieldType.SELECT, options: [ … ] },
10 { name: 'plannedLaunchAt', type: FieldType.DATE_TIME },
11 { name: 'rocket', type: FieldType.RELATION, relationType: RelationType.MANY_TO_ONE },
226 unmodified lines
…my-twenty-app/src/objects/payload.object.ts
+198-01import { STANDARD_OBJECT } from 'twenty-sdk';
4 { name: 'payloadType', type: FieldType.SELECT },
5 { name: 'customer', type: FieldType.RELATION,
6 relationTargetObjectMetadataUniversalIdentifier: STANDARD_OBJECT.company.universalIdentifier,
7 universalSettings: { relationType: RelationType.MANY_TO_ONE, joinColumnName: 'companyId' },
8 },
190 unmodified lines
…my-twenty-app/src/objects/rocket.object.ts
+28-32140 unmodified lines
141
141 {
142 name: 'launches',
143 type: FieldType.RELATION,
144 relationType: RelationType.ONE_TO_MANY,
145 relationTargetObjectMetadataUniversalIdentifier: SCHEMA_IDS.launch.object,
146 },
…my-twenty-app/src/views/upcoming-launches.view.ts
+82-01import { defineView, ViewFilterOperand, ViewType } from 'twenty-sdk';
3export default defineView({
4 name: 'Upcoming launches',
5 type: ViewType.TABLE,
6 filters: [
7 { fieldMetadataUniversalIdentifier: SCHEMA_IDS.launch.fields.plannedLaunchAt,
8 operand: ViewFilterOperand.IS_IN_FUTURE },
9 ],
73 unmodified lines
…my-twenty-app/src/__tests__/schema.integration-test.ts
+412-40150 unmodified lines
151 expect(application.objects).toHaveLength(1);
151 expect(application.objects).toHaveLength(4);
152 expectObject(application.objects, SCHEMA_IDS.launch.object, 'launch', 'Launch');
153 expectObject(application.objects, SCHEMA_IDS.payload.object, 'payload', 'Payload');
154 expectObject(application.objects, SCHEMA_IDS.launchSite.object, 'launchSite', 'Launch site');
155 expectRelationPair(payloadCustomerField, [payload.object, STANDARD_OBJECT.company.universalIdentifier], [...]);
325 unmodified lines