To solve this optimization problem, we first need to define the decision variables, objective function, and constraints based on the given information.

Let's denote:
- \(x_d\) as the number of desk chairs produced,
- \(x_g\) as the number of garden chairs produced.

The objective is to maximize profit. The profit on each desk chair is $100, and on each garden chair is $150. Therefore, the total profit \(P\) can be represented as:
\[ P = 100x_d + 150x_g \]

There are two main constraints:
1. **Total Demand Constraint**: The total number of chairs produced cannot exceed 250 units.
\[ x_d + x_g \leq 250 \]

2. **Manufacturing Budget Constraint**: The total cost of producing the chairs cannot exceed $35,000. Given that each desk chair costs $200 to make and each garden chair costs $300 to make, we have:
\[ 200x_d + 300x_g \leq 35000 \]

Additionally, since we cannot produce a negative number of chairs, we also have non-negativity constraints:
\[ x_d \geq 0 \]
\[ x_g \geq 0 \]

Now, let's express this problem in Gurobi code using Python:

```python
from gurobipy import *

# Create a new model
m = Model("Nova_Furniture_Optimization")

# Define the decision variables
x_d = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="desk_chairs")
x_g = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="garden_chairs")

# Set the objective function: Maximize profit
m.setObjective(100*x_d + 150*x_g, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x_d + x_g <= 250, "Total_Demand_Constraint")
m.addConstr(200*x_d + 300*x_g <= 35000, "Manufacturing_Budget_Constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Desk Chairs: {x_d.x}")
    print(f"Garden Chairs: {x_g.x}")
    print(f"Total Profit: {m.objVal}")
else:
    print("No optimal solution found")
```