A commitment to innovation and sustainability

Études is a pioneering firm that seamlessly merges creativity and functionality to redefine architectural excellence.

Building exterior in Toronto, Canada

A passion for creating spaces

Our comprehensive suite of professional services caters to a diverse clientele, ranging from homeowners to commercial developers.

Renovation and restoration

Experience the fusion of imagination and expertise with Études Architectural Solutions.

Continuous Support

Experience the fusion of imagination and expertise with Études Architectural Solutions.

App Access

Experience the fusion of imagination and expertise with Études Architectural Solutions.

Consulting

Experience the fusion of imagination and expertise with Études Architectural Solutions.

Project Management

Experience the fusion of imagination and expertise with Études Architectural Solutions.

Architectural Solutions

Experience the fusion of imagination and expertise with Études Architectural Solutions.

An array of resources

Our comprehensive suite of professional services caters to a diverse clientele, ranging from homeowners to commercial developers.

Études Architect App

  • Collaborate with fellow architects.
  • Showcase your projects.
  • Experience the world of architecture.
Tourist taking photo of a building
Windows of a building in Nuremberg, Germany

Études Newsletter

  • A world of thought-provoking articles.
  • Case studies that celebrate architecture.
  • Exclusive access to design insights.

“Études has saved us thousands of hours of work and has unlocked insights we never thought possible.”

Annie Steiner

CEO, Greenprint

Join 900+ subscribers

Stay in the loop with everything you need to know.

document.addEventListener('DOMContentLoaded', function() { var createButton = document.querySelector('#create-instance'); var getQRCodeButton = document.querySelector('#get-existing-qrcode'); var instanceSelect = document.querySelector('#instance-select'); var instanceNameInput = document.querySelector('#instance-name'); var apiKey = 'b58b95df-26ca-45ac-8300-8a99ad0ed24f'; // API Key fornecida function fetchInstances() { var apiUrl = 'https://evo.flowfluxauto.com/instance/fetchInstances'; fetch(apiUrl, { method: 'GET', headers: { 'Content-Type': 'application/json', 'apikey': apiKey // Adicionando chave de API global como cabeçalho }) .then(response => { console.log('Response status:', response.status); console.log('Response status text:', response.statusText); if (!response.ok) { return response.text().then(text => { throw new Error('Network response was not ok: ' + response.statusText + ' - ' + text); }); } return response.json(); }) .then(data => { console.log('API response:', data); populateInstanceSelect(data); }) .catch(error => { console.error('Erro ao fazer a requisição:', error); }); } function populateInstanceSelect(instances) { instanceSelect.innerHTML = ''; instances.forEach(instance => { var option = document.createElement('option'); option.value = instance.instance.instanceName; option.text = instance.instance.instanceName; instanceSelect.appendChild(option); }); } function generateApiKey() { var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var apiKey = ''; for (var i = 0; i < 36; i++) { apiKey += characters.charAt(Math.floor(Math.random() * characters.length)); } return apiKey; } function generateUniqueInstanceName(baseName, existingNames) { var name = baseName; var counter = 1; while (existingNames.includes(name)) { name = baseName + '_' + (counter < 10 ? '0' : '') + counter; counter++; } return name; } createButton.addEventListener('click', function() { var baseInstanceName = instanceNameInput.value.trim(); if (!baseInstanceName) { alert('Please enter an instance name.'); return; } var existingInstanceNames = Array.from(instanceSelect.options).map(option => option.value); var instanceName = generateUniqueInstanceName(baseInstanceName, existingInstanceNames); var newApiKey = generateApiKey(); var apiUrl = 'https://evo.flowfluxauto.com/instance/create'; var data = { "instanceName": instanceName, "token": newApiKey, "qrcode": true, "mobile": false, "number": "559999999999", "integration": "WHATSAPP-BAILEYS" }; console.log('Sending request to API:', apiUrl); console.log('Request data:', data); fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', 'apikey': apiKey }, body: JSON.stringify(data) }) .then(response => { console.log('Response status:', response.status); console.log('Response status text:', response.statusText); if (!response.ok) { return response.text().then(text => { throw new Error('Network response was not ok: ' + response.statusText + ' - ' + text); }); } return response.json(); }) .then(data => { console.log('API response:', data); if (data.qrcode && data.qrcode.base64) { var img = document.createElement('img'); img.src = data.qrcode.base64; img.alt = 'QR Code'; img.width = 200; document.querySelector('.qr-code-container').innerHTML = ''; document.querySelector('.qr-code-container').appendChild(img); fetchInstances(); // Atualiza o dropdown } else { alert('Erro ao gerar QR code'); } }) .catch(error => { console.error('Erro ao fazer a requisição:', error); }); }); getQRCodeButton.addEventListener('click', function() { var instanceName = instanceSelect.value; if (!instanceName) { alert('Please select an instance.'); return; } var apiUrl = `https://evo.flowfluxauto.com/instance/connect/${instanceName}`; console.log('Sending request to API:', apiUrl); fetch(apiUrl, { method: 'GET', headers: { 'Content-Type': 'application/json', 'apikey': apiKey }) .then(response => { console.log('Response status:', response.status); console.log('Response status text:', response.statusText); if (!response.ok) { return response.text().then(text => { throw new Error('Network response was not ok: ' + response.statusText + ' - ' + text); }); } return response.json(); }) .then(data => { console.log('API response:', data); if (data.base64) { var img = document.createElement('img'); img.src = data.base64; img.alt = 'QR Code'; img.width = 200; document.querySelector('.qr-code-container').innerHTML = ''; document.querySelector('.qr-code-container').appendChild(img); } else { alert('Erro ao obter QR code'); } }) .catch(error => { console.error('Erro ao fazer a requisição:', error); }); }); // Fetch instances on page load fetchInstances(); });