Pasar Tenaga Kerja Pindahan
Bangun dengan AI Agent
Backend Marketplace Tenaga Kerja Pindahan

Template Backend Marketplace Tenaga Kerja Pindahan
Pencarian Kru, Penerimaan Pemesanan, Penugasan, dan Tinjauan

Backend marketplace tenaga kerja pindahan yang siap produksi di Back4app dengan pencarian CrewListing, penerimaan BookingRequest, log CrewAssignment, dan catatan CrewReview. Termasuk diagram ER, kamus data, skema JSON, sandbox API, dan prompt AI Agent untuk bootstrap cepat.

Poin-Poin Penting

Template ini memberi Anda backend pasar tenaga kerja pemindahan dengan pencarian CrewListing, pengambilan BookingRequest, dan pelacakan CrewAssignment sehingga operator dapat mencocokkan permintaan dengan kru yang tersedia lebih cepat.

  1. Pencarian CrewListingModel CrewListing dengan hourlyRate, crewSize, heavyLiftingCapability, serviceArea, equipmentNotes, dan availabilityStatus sehingga pembeli dapat membandingkan kru sebelum memesan.
  2. Pengambilan BookingRequestSimpan BookingRequest dengan jobTitle, moveDate, startTime, hoursNeeded, pickupZip, dropoffZip, dan heavyItems untuk menangkap detail pemindahan.
  3. Log CrewAssignmentJaga agar CrewAssignment terikat dengan bookingRequest, crewListing, assignedBy, crewSizeLogged, dan arrivalStatus untuk setiap pekerjaan yang dikirim.
  4. Riwayat CrewReviewGunakan CrewReview dengan penilaian, komentar, dan safetyFlag untuk melacak hasil setelah catatan BookingRequest selesai.

Memahami Backend Pasar Tenaga Kerja Pindahan

Dalam pasar tenaga kerja pindahan, kebenaran operasional adalah jadwal — jika kalender salah, setiap janji yang mengikuti juga salah. Keandalan adalah fitur, bukan catatan kaki. Modelkan entitas inti di Back4app untuk memberi tim pasar tenaga kerja pindahan backend yang dapat berkembang dari satu yard ke operasi multi-lokasi. Skema mencakup User, CrewListing, BookingRequest, CrewAssignment, dan CrewReview dengan fitur alur kerja otentikasi dan pasar yang terintegrasi. Hubungkan frontend pilihan Anda dan kirim lebih cepat.

Terbaik untuk:

Pasar tenaga kerja pindahanPlatform pencocokan pemindah per jamAplikasi pemesanan kru pengangkat beratDasbor operator pindahan lokalPeluncuran MVPTim memilih BaaS untuk pasar tenaga kerja

Ikhtisar backend Pasar Tenaga Kerja Pindahan

Pelanggan tidak peduli tentang alat internal Anda; mereka peduli apakah janji pasar tenaga kerja pindahan datang tepat waktu, dengan aset yang tepat dan dokumen yang tepat.

Ringkasan ini mengorientasikan tim di sekitar akun pengguna dan peran, profil pasar listing kru, intake permintaan booking sebelum siapa pun menyelami diagram ER atau ekspor JSON.

Fitur Utama Marketplace Tenaga Kerja Pemindahan

Setiap kartu teknologi di hub ini menggunakan skema backend tenaga kerja bergerak yang sama dengan User, CrewListing, BookingRequest, CrewAssignment, dan CrewReview.

Akun pengguna dan peran

Pengguna menyimpan nama pengguna, email, peran, nama tampilan, nomor telepon, dan area layanan.

Profil pasar CrewListing

CrewListing menyimpan judul, tarif per jam, ukuran tim, kemampuan pengangkatan berat, area layanan, dan status ketersediaan.

Penerimaan BookingRequest

BookingRequest menangkap jabatan, tanggal pindahan, waktu mulai, jam yang diperlukan, kode pos pengambilan, kode pos pengantaran, dan barang berat.

Pelacakan CrewAssignment

CrewAssignment menghubungkan bookingRequest, crewListing, assignedBy, crewSizeLogged, dan arrivalStatus.

Umpan balik CrewReview

CrewReview menyimpan bookingRequest, penilai, crewListing, penilaian, komentar, dan safetyFlag.

Mengapa Membangun Backend Pasar Tenaga Kerja Pindahan Anda dengan Back4app?

Back4app memberikan Anda primitif Pengguna, BookingRequest, dan CrewListing sehingga tim Anda dapat fokus pada mencocokkan kru dan pekerjaan pindahan daripada menyalurkan infrastruktur.

  • Manajemen CrewListing dan pemesanan: Kelas User, CrewListing, dan BookingRequest menyimpan identitas login, serviceArea, moveDate, pickupZip, dan dropoffZip di satu tempat.
  • Kontrol alur penugasan dan tinjauan: Catatan CrewAssignment dan CrewReview membuat crewSizeLogged, arrivalStatus, rating, dan safetyFlag terlihat setelah pengiriman.
  • Fleksibilitas Realtime + API: Gunakan Live Queries untuk pembaruan BookingRequest sambil menjaga REST dan GraphQL tersedia untuk dasbor pengiriman.

Bangun dan iterasi fitur tenaga kerja pemindahan dengan cepat dengan satu kontrak backend di semua platform.

Manfaat Utama

Backend tenaga kerja bergerak yang membantu Anda berpindah dari prospek ke penugasan kru tanpa menulis ulang lapisan data.

Penerimaan pemesanan lebih cepat

Mulai dari BookingRequest dengan moveDate, startTime, hoursNeeded, pickupZip, dan dropoffZip alih-alih menciptakan formulir pindahan baru.

Pemeriksaan kemampuan kru yang jelas

Gunakan CrewListing dengan heavyLiftingCapability, crewSize, dan equipmentNotes untuk menjaga agar pengangkatan tangga, dolly, dan tali tetap terlihat sebelum pengiriman.

Penugasan kru yang dapat Anda audit

CrewAssignment menjaga bookingRequest, crewListing, assignedBy, crewSizeLogged, dan arrivalStatus terlihat saat pekerjaan dikonfirmasi.

Akses terbatas untuk operator dan penggerak

Gunakan ACL/CLP sehingga hanya pengguna yang tepat yang dapat mengedit User, CrewListing, BookingRequest, dan CrewAssignment.

Riwayat dan tinjauan kerja

Simpan perubahan status BookingRequest, timestamp CrewAssignment, dan penilaian CrewReview tanpa merusak skema.

Alur kerja bootstrap AI

Hasilkan kerangka backend dan panduan integrasi dengan cepat menggunakan satu prompt terstruktur.

Siap untuk meluncurkan pasar tenaga kerja pindahan Anda?

Biarkan Agen AI Back4app membuat kerangka backend tenaga kerja pindahan Anda dan menghasilkan alur CrewListing, BookingRequest, CrewAssignment, dan CrewReview dari satu prompt.

Gratis untuk memulai — 50 prompt Agen AI/bulan, tidak memerlukan kartu kredit

Tumpukan Teknologi Tenaga Kerja Pindahan

Semua yang termasuk dalam template backend pasar tenaga kerja pindahan ini.

Frontend
13+ teknologi
Backend
Back4app
Database
MongoDB
Otentikasi
Otentikasi bawaan + sesi
API
REST dan GraphQL
Realtime
Live Queries

Diagram Kelas Marketplace

Model hubungan entitas untuk skema backend marketplace tenaga kerja yang berpindah.

Lihat sumber diagram
Mermaid
erDiagram
    User ||--o{ CrewListing : "owner"
    User ||--o{ BookingRequest : "buyer"
    User ||--o{ CrewAssignment : "assignedBy"
    User ||--o{ CrewReview : "reviewer"
    CrewListing ||--o{ BookingRequest : "preferredCrew"
    CrewListing ||--o{ CrewAssignment : "crewListing"
    CrewListing ||--o{ CrewReview : "crewListing"
    BookingRequest ||--o{ CrewAssignment : "bookingRequest"
    BookingRequest ||--o{ CrewReview : "bookingRequest"

    User {
        String objectId PK
        String username
        String email
        String password
        String role
        String displayName
        String phoneNumber
        String serviceArea
        Date createdAt
        Date updatedAt
    }

    CrewListing {
        String objectId PK
        String title
        Number hourlyRate
        Number crewSize
        Boolean heavyLiftingCapability
        String serviceArea
        String equipmentNotes
        String availabilityStatus
        String ownerId FK
        Date createdAt
        Date updatedAt
    }

    BookingRequest {
        String objectId PK
        String jobTitle
        Date moveDate
        String startTime
        Number hoursNeeded
        String pickupZip
        String dropoffZip
        Boolean heavyItems
        String status
        String buyerId FK
        String preferredCrewId FK
        Date createdAt
        Date updatedAt
    }

    CrewAssignment {
        String objectId PK
        String bookingRequestId FK
        String crewListingId FK
        String assignedById FK
        Number crewSizeLogged
        String arrivalStatus
        Date startedAt
        Date finishedAt
        Date createdAt
        Date updatedAt
    }

    CrewReview {
        String objectId PK
        String bookingRequestId FK
        String reviewerId FK
        String crewListingId FK
        Number rating
        String comment
        Boolean safetyFlag
        Date createdAt
        Date updatedAt
    }

Urutan Alur Kerja Pemesanan

Alur runtime yang khas untuk login, pencarian Daftar Kru, pembuatan Permintaan Pemesanan, pencatatan Tugas Kru, dan pembaruan Ulasan Kru.

Lihat sumber diagram
Mermaid
sequenceDiagram
  participant Buyer
  participant App as Moving Labor Marketplace App
  participant Back4app as Back4app Cloud

  Buyer->>App: Login
  App->>Back4app: POST /login
  Back4app-->>App: Session token

  Buyer->>App: Search crew listings by hourlyRate, crewSize, and heavyLiftingCapability
  App->>Back4app: GET /classes/CrewListing?where=...
  Back4app-->>App: Matching CrewListing rows

  Buyer->>App: Submit BookingRequest for a moveDate and hoursNeeded
  App->>Back4app: POST /classes/BookingRequest
  Back4app-->>App: BookingRequest objectId

  Operator->>App: Assign CrewAssignment and log crewSizeLogged
  App->>Back4app: POST /classes/CrewAssignment
  Back4app-->>App: Assignment saved

  App->>Back4app: Live query updates for BookingRequest status and CrewReview
  Back4app-->>App: Updated move workflow and ratings

Kamus Bidang

Referensi tingkat bidang lengkap untuk setiap kelas dalam skema pasar tenaga kerja bergerak.

BidangTipeDeskripsiDiperlukan
objectIdStringAuto-generated unique identifierOtomatis
usernameStringUser login name
emailStringUser email address
passwordStringHashed password (write-only)
roleStringRole of the user (buyer, seller, operator)
displayNameStringPublic name shown in the marketplace
phoneNumberStringContact phone number
serviceAreaStringPrimary metro area or region served
createdAtDateAuto-generated creation timestampOtomatis
updatedAtDateAuto-generated last-update timestampOtomatis

10 bidang di User

Aturan Akses untuk Pengguna, Kru, dan Pemesanan

Bagaimana strategi ACL dan CLP mengamankan Pengguna, DaftarKru, PermintaanPemesanan, PenugasanKru, dan TinjauanKru.

Kontrol profil pengguna

Hanya pemilik akun atau operator yang dapat memperbarui nama pengguna, peran, namaTampilan, nomorTelepon, dan areaLayanan.

Integritas pemesanan

Hanya pembeli atau pengirim yang dapat membuat, mengedit, atau membatalkan baris BookingRequest dan CrewAssignment.

Visibilitas ulasan terbatas

Batasi pembacaan CrewReview hanya untuk peserta BookingRequest yang sesuai dan operator yang disetujui.

Skema JSON

Definisi skema JSON mentah siap untuk disalin ke Back4app atau digunakan sebagai referensi implementasi.

JSON
{
  "classes": [
    {
      "className": "User",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "username": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": true
        },
        "password": {
          "type": "String",
          "required": true
        },
        "role": {
          "type": "String",
          "required": true
        },
        "displayName": {
          "type": "String",
          "required": true
        },
        "phoneNumber": {
          "type": "String",
          "required": false
        },
        "serviceArea": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "CrewListing",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "title": {
          "type": "String",
          "required": true
        },
        "hourlyRate": {
          "type": "Number",
          "required": true
        },
        "crewSize": {
          "type": "Number",
          "required": true
        },
        "heavyLiftingCapability": {
          "type": "Boolean",
          "required": true
        },
        "serviceArea": {
          "type": "String",
          "required": true
        },
        "equipmentNotes": {
          "type": "String",
          "required": false
        },
        "availabilityStatus": {
          "type": "String",
          "required": true
        },
        "owner": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "BookingRequest",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "jobTitle": {
          "type": "String",
          "required": true
        },
        "moveDate": {
          "type": "Date",
          "required": true
        },
        "startTime": {
          "type": "String",
          "required": true
        },
        "hoursNeeded": {
          "type": "Number",
          "required": true
        },
        "pickupZip": {
          "type": "String",
          "required": true
        },
        "dropoffZip": {
          "type": "String",
          "required": true
        },
        "heavyItems": {
          "type": "Boolean",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "buyer": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "preferredCrew": {
          "type": "Pointer",
          "required": false,
          "targetClass": "CrewListing"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "CrewAssignment",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "bookingRequest": {
          "type": "Pointer",
          "required": true,
          "targetClass": "BookingRequest"
        },
        "crewListing": {
          "type": "Pointer",
          "required": true,
          "targetClass": "CrewListing"
        },
        "assignedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "crewSizeLogged": {
          "type": "Number",
          "required": true
        },
        "arrivalStatus": {
          "type": "String",
          "required": true
        },
        "startedAt": {
          "type": "Date",
          "required": false
        },
        "finishedAt": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "CrewReview",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "bookingRequest": {
          "type": "Pointer",
          "required": true,
          "targetClass": "BookingRequest"
        },
        "reviewer": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "crewListing": {
          "type": "Pointer",
          "required": true,
          "targetClass": "CrewListing"
        },
        "rating": {
          "type": "Number",
          "required": true
        },
        "comment": {
          "type": "String",
          "required": false
        },
        "safetyFlag": {
          "type": "Boolean",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

Bangun dengan Agen AI

Gunakan Agen AI Back4app untuk menghasilkan aplikasi pasar tenaga kerja bergerak nyata dari template ini, termasuk frontend, backend, otentikasi, dan alur CrewListing, BookingRequest, CrewAssignment, dan CrewReview.

Agen AI Back4app
Siap untuk membangun
Buat backend aplikasi pasar tenaga kerja yang aman di Back4app dengan skema dan perilaku yang tepat ini.

Skema:
1. User: username (String, diperlukan), email (String, diperlukan), password (String, diperlukan), role (String, diperlukan), displayName (String, diperlukan), phoneNumber (String, opsional), serviceArea (String, opsional); objectId, createdAt, updatedAt (sistem).
2. CrewListing: title (String, diperlukan), hourlyRate (Number, diperlukan), crewSize (Number, diperlukan), heavyLiftingCapability (Boolean, diperlukan), serviceArea (String, diperlukan), equipmentNotes (String, opsional), availabilityStatus (String, diperlukan), owner (Pointer to User, diperlukan); objectId, createdAt, updatedAt (sistem).
3. BookingRequest: jobTitle (String, diperlukan), moveDate (Date, diperlukan), startTime (String, diperlukan), hoursNeeded (Number, diperlukan), pickupZip (String, diperlukan), dropoffZip (String, diperlukan), heavyItems (Boolean, diperlukan), status (String, diperlukan), buyer (Pointer to User, diperlukan), preferredCrew (Pointer to CrewListing, opsional); objectId, createdAt, updatedAt (sistem).
4. CrewAssignment: bookingRequest (Pointer to BookingRequest, diperlukan), crewListing (Pointer to CrewListing, diperlukan), assignedBy (Pointer to User, diperlukan), crewSizeLogged (Number, diperlukan), arrivalStatus (String, diperlukan), startedAt (Date, opsional), finishedAt (Date, opsional); objectId, createdAt, updatedAt (sistem).
5. CrewReview: bookingRequest (Pointer to BookingRequest, diperlukan), reviewer (Pointer to User, diperlukan), crewListing (Pointer to CrewListing, diperlukan), rating (Number, diperlukan), comment (String, opsional), safetyFlag (Boolean, opsional); objectId, createdAt, updatedAt (sistem).

Keamanan:
- Pembeli dapat membuat catatan BookingRequest dan membaca pemesanan mereka sendiri.
- Penjual dapat mengelola catatan CrewListing mereka sendiri.
- Operator dapat membuat catatan CrewAssignment dan memperbarui status BookingRequest.
- Catatan CrewReview hanya dapat dibuat setelah pemesanan selesai.

Perilaku:
- Cari kru berdasarkan hourlyRate, crewSize, heavyLiftingCapability, dan serviceArea.
- Buat permintaan pemesanan dengan moveDate dan hoursNeeded.
- Tugas kru dan catat crewSizeLogged.
- Kumpulkan penilaian pasca-pekerjaan dan umpan balik keselamatan.

Pengiriman:
- Aplikasi Back4app dengan skema, ACL, CLP, dan alur UI untuk pembeli, penjual, dan operator, termasuk pencarian CrewListing, penerimaan BookingRequest, pelacakan CrewAssignment, dan pengambilan CrewReview.

Tekan tombol di bawah ini untuk membuka Agen dengan prompt template ini yang sudah terisi.

Ini adalah prompt dasar tanpa akhiran teknologi. Anda dapat mengadaptasi tumpukan frontend yang dihasilkan setelahnya.

Terapkan dalam menit50 prompt gratis / bulanTanpa kartu kredit yang diperlukan

API Sandbox

Coba endpoints REST dan GraphQL terhadap skema pasar tenaga kerja yang bergerak. Respon menggunakan data tiruan dan tidak memerlukan akun Back4app.

Memuat playground…

Menggunakan skema yang sama seperti template ini.

Pilih Tumpukan Anda

Perluas setiap kartu untuk melihat cara mengintegrasikan CrewListing, BookingRequest, dan CrewAssignment dengan tumpukan pilihan Anda.

Flutter Pasar Tenaga Kerja Pindahan Backend

React Pasar Tenaga Kerja Pindahan Backend

React Asli Pasar Tenaga Kerja Pindahan Backend

Next.js Pasar Tenaga Kerja Pindahan Backend

JavaScript Pasar Tenaga Kerja Pindahan Backend

Android Pasar Tenaga Kerja Pindahan Backend

iOS Pasar Tenaga Kerja Pindahan Backend

Vue Pasar Tenaga Kerja Pindahan Backend

Angular Pasar Tenaga Kerja Pindahan Backend

GraphQL Pasar Tenaga Kerja Pindahan Backend

REST API Pasar Tenaga Kerja Pindahan Backend

PHP Pasar Tenaga Kerja Pindahan Backend

.NET Pasar Tenaga Kerja Pindahan Backend

Apa yang Anda Dapatkan dengan Setiap Teknologi

Setiap tumpukan menggunakan skema backend tenaga kerja bergerak dan kontrak API yang sama.

Struktur data tenaga kerja bergerak yang terpadu

Dengan mudah mengelola Pengguna, CrewListing, BookingRequest, CrewAssignment, dan CrewReview dengan skema yang konsisten.

Pencocokan kru berdasarkan tarif dan ukuran

Bandingkan baris CrewListing dan tetapkan ukuran kru yang tepat untuk setiap permintaan pindahan.

Pelacakan kemampuan pengangkatan berat

Simpan kemampuanPengangkatanBerat dan catatanPeralatan yang terlampir pada setiap daftar kru.

Alur kerja operator yang dapat disesuaikan

Tentukan level akses dan izin yang disesuaikan untuk pembeli, penjual, dan operator.

Kerangka Pasar Pekerjaan Pindahan

Bandingkan kecepatan pengaturan, gaya SDK, dan dukungan AI di semua teknologi yang didukung.

Kerangka KerjaWaktu PengaturanManfaat Pasar Tenaga Kerja PindahanJenis SDKDukungan AI
Sekitar 5 menitBasis kode tunggal untuk pengiriman mover di mobile dan web.SDK TersaringLengkap
Kurang dari 5 menitDasbor web cepat untuk daftar kru dan pemesanan.SDK TersaringLengkap
~3–7 menitAplikasi mobile lintas platform untuk pengiriman mover.SDK TipeLengkap
Pengaturan cepat (5 menit)Aplikasi web yang dirender di server untuk operasi tenaga kerja pindahan.SDK TipeLengkap
~3–5 menitIntegrasi web ringan untuk pencocokan tenaga kerja.SDK TipeLengkap
Sekitar 5 menitAplikasi Android asli untuk penggerak dan pengirim.SDK TipeLengkap
Kurang dari 5 menitAplikasi iOS asli untuk koordinasi penggerak.SDK TipeLengkap
~3–7 menitUI web Reactif untuk operasi pasar tenaga kerja.SDK TipeLengkap
Pengaturan cepat (5 menit)Aplikasi web perusahaan untuk alur kerja pengirim.SDK TipeLengkap
Di bawah 2 menitAPI GraphQL yang fleksibel untuk pencocokan tenaga kerja.API GraphQLLengkap
Pengaturan cepat (2 menit)Integrasi REST API untuk sistem pengiriman tenaga kerja.REST APILengkap
~3 menitBackend PHP sisi server untuk pengiriman tenaga kerja.REST APILengkap
~3–7 menit.NET backend untuk operasi tenaga kerja pindahan.SDK TertulisLengkap

Waktu pengaturan mencerminkan durasi yang diharapkan dari bootstrap proyek hingga kueri CrewListing atau BookingRequest pertama menggunakan skema template ini.

Pusat Bantuan

Pertanyaan umum tentang membangun backend pasar tenaga kerja pemindahan dengan template ini.

Apa yang harus dilakukan oleh operator pasar tenaga kerja pindahan saat memperluas ke lokasi kedua?
Bagaimana model pasar tenaga kerja pindahan untuk reservasi, konflik, dan deposit dalam satu grafik yang koheren?
Seperti apa migrasi ketika kompleksitas katalog pasar tenaga kerja pindahan melonjak dari musim ke musim?
Bagaimana saya menjalankan query untuk kru dan booking dengan Flutter?
Bagaimana saya mengelola akses pasar tenaga kerja pindahan dengan Next.js Server Actions?
Bisakah React Native menyimpan daftar kru dan permintaan pindah secara offline?
Bagaimana cara mencegah perubahan penugasan kru yang tidak sah?
Apa cara terbaik untuk menampilkan kru dan penugasan di Android?
Bagaimana alur kerja tenaga kerja pemindahan dari awal hingga akhir?

Dipercayai oleh pengembang di seluruh dunia

Bergabunglah dengan tim yang mengirimkan produk pasar tenaga kerja pindahan lebih cepat dengan template Back4app

G2 Users Love Us Badge

Siap untuk Membangun Pasar Tenaga Kerja Pindahan Anda?

Mulai proyek tenaga kerja pindahan Anda dalam hitungan menit. Tanpa kartu kredit diperlukan.

Pilih Teknologi